CMakeList.txt

这篇具有很好参考价值的文章主要介绍了CMakeList.txt。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

复习一下CMakeList.txt的写法,以下面的一个CMakeList.txt为例

一个最近写好的CMakeList.txt

cmake_minimum_required(VERSION 3.17)

project(QtVTKProject)

#======================= INCLUSION OF Qt =======================#
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH $ENV{QTDIR})
find_package(OpenGL)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Widgets REQUIRED)

#======================= INCLUSION OF VTK ======================#
set(VTK_DIR $ENV{VTK_DIR})
find_package(VTK REQUIRED)
include(${VTK_USE_FILE})

#======================= INCLUSION OF Our Code ======================#
set(FORMS_DIR "${CMAKE_SOURCE_DIR}/forms")
set(INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include")
set(SOURCE_DIR "${CMAKE_SOURCE_DIR}/src")

include_directories(${FORMS_DIR})
include_directories(${INCLUDE_DIR})
include_directories(${SOURCE_DIR})

file(GLOB_RECURSE SOURCES
    "${FORMS_DIR}/*.ui"
    "${INCLUDE_DIR}/*.h"
    "${SOURCE_DIR}/*.cpp"
)

# Add the forms directory to the AUTOUIC search paths
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_AUTOUIC_SEARCH_PATHS} ${FORMS_DIR})

# Add the executable
if (WIN32) 
    add_executable(QtVTKProject WIN32 ${SOURCES})
elseif(UNIX)
    add_executable(QtVTKProject ${SOURCES})
endif()

# Add the target includes
target_include_directories(QtVTKProject PRIVATE ${FORMS_DIR})
target_include_directories(QtVTKProject PRIVATE ${INCLUDE_DIR})
target_include_directories(QtVTKProject PRIVATE ${SOURCE_DIR})

#===================== LINKING LIBRARIES =======================#
target_link_libraries( QtVTKProject Qt5::OpenGL)
target_link_libraries( QtVTKProject Qt5::Xml)
target_link_libraries( QtVTKProject Qt5::Widgets)
target_link_libraries( QtVTKProject ${QT_LIBRARIES} ${OPENGL_LIBRARIES})
target_link_libraries( QtVTKProject ${VTK_LIBRARIES})

对上边CMakeList.txt的说明

cmake_minimum_required(VERSION 3.17): 指定项目所需的最低CMake版本。

project(QtVTKProject): 指定项目名称为"QtVTKProject"。

#======================= INCLUSION OF Qt =======================#

set(CMAKE_INCLUDE_CURRENT_DIR ON): 设置CMake包含当前目录。

set(CMAKE_AUTOMOC ON): 设置自动运行moc(Meta-Object Compiler)工具,用于处理Qt的元对象系统。

set(CMAKE_AUTOUIC ON): 设置自动运行uic(User Interface Compiler)工具,用于处理Qt的UI文件。

set(CMAKE_PREFIX_PATH $ENV{QTDIR}): 设置Qt的安装路径。

find_package(OpenGL): 查找OpenGL库。

find_package(Qt5Core REQUIRED): 查找并要求Qt5Core库。

find_package(Qt5Gui REQUIRED): 查找并要求Qt5Gui库。

find_package(Qt5OpenGL REQUIRED): 查找并要求Qt5OpenGL库。

find_package(Qt5Xml REQUIRED): 查找并要求Qt5Xml库。

find_package(Qt5Widgets REQUIRED): 查找并要求Qt5Widgets库。

#======================= INCLUSION OF VTK ======================#

set(VTK_DIR $ENV{VTK_DIR}): 设置VTK的安装路径。

find_package(VTK REQUIRED): 查找并要求VTK库。

include(${VTK_USE_FILE}): 包含VTK的使用文件。

#======================= INCLUSION OF Our Code ======================#

set(FORMS_DIR "${CMAKE_SOURCE_DIR}/forms"): 设置forms目录的路径。

set(INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include"): 设置include目录的路径。

set(SOURCE_DIR "${CMAKE_SOURCE_DIR}/src"): 设置src目录的路径。

include_directories(${FORMS_DIR}): 包含forms目录以供编译器搜索ui文件。

include_directories(${INCLUDE_DIR}): 包含include目录以供编译器搜索头文件。

include_directories(${SOURCE_DIR}): 包含src目录以供编译器搜索源文件。

file(GLOB_RECURSE SOURCES ...): 使用GLOB_RECURSE命令获取指定目录下的所有源文件。

set(CMAKE_AUTOUIC_SEARCH_PATHS ...): 将forms目录添加到AUTOUIC搜索路径。

if (WIN32) ... elseif(UNIX) ... endif(): 根据操作系统类型选择生成可执行文件的选项。
在Windows上使用WIN32选项,而在Unix上不包含此选项。



add_executable(QtVTKProject ... ${SOURCES}): 添加可执行文件的构建目标,并指定源文件。

target_include_directories(QtVTKProject PRIVATE ...): 为目标添加私有的包含目录。

#===================== LINKING LIBRARIES =======================#

target_link_libraries( QtVTKProject ...): 链接所需的库文件到目标。

最后,该CMakeLists.txt文件的主要目标是构建一个名为"QtVTKProject"的可执行文件。它依赖于Qt和VTK库,并包含了一些源文件和UI文件。通过设置相关的包含目录和链接库,确保了项目的正确构建和链接。

修改

如果只需要Qt库的话,可以简单修改一下:
CMakeList.txt,Qt,c/c++知识二次稳固,C/C++底层逻辑,c++,c,qt文章来源地址https://www.toymoban.com/news/detail-700215.html

cmake_minimum_required(VERSION 3.17)

project(Demo1)

#======================= INCLUSION OF Qt =======================#
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_PREFIX_PATH $ENV{QTDIR})
find_package(OpenGL)
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Xml REQUIRED)
find_package(Qt5Widgets REQUIRED)



#======================= INCLUSION OF Our Code ======================#
set(FORMS_DIR "${CMAKE_SOURCE_DIR}/forms")
set(INCLUDE_DIR "${CMAKE_SOURCE_DIR}/include")
set(SOURCE_DIR "${CMAKE_SOURCE_DIR}/src")

include_directories(${FORMS_DIR})
include_directories(${INCLUDE_DIR})
include_directories(${SOURCE_DIR})

file(GLOB_RECURSE SOURCES
    "${FORMS_DIR}/*.ui"
    "${INCLUDE_DIR}/*.h"
    "${SOURCE_DIR}/*.cpp"
)

# Add the forms directory to the AUTOUIC search paths
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_AUTOUIC_SEARCH_PATHS} ${FORMS_DIR})

# Add the executable
if (WIN32) 
    add_executable(Demo1 WIN32 ${SOURCES})
elseif(UNIX)
    add_executable(Demo1 ${SOURCES})
endif()

# Add the target includes
target_include_directories(Demo1 PRIVATE ${FORMS_DIR})
target_include_directories(Demo1 PRIVATE ${INCLUDE_DIR})
target_include_directories(Demo1 PRIVATE ${SOURCE_DIR})

#===================== LINKING LIBRARIES =======================#
target_link_libraries( Demo1 Qt5::OpenGL)
target_link_libraries( Demo1 Qt5::Xml)
target_link_libraries( Demo1 Qt5::Widgets)
target_link_libraries( Demo1 ${QT_LIBRARIES} ${OPENGL_LIBRARIES})

到了这里,关于CMakeList.txt的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • InnoDB 引擎 底层逻辑

    目录 0 课程视频 1 逻辑存储结构 1.1 结构图 1.2 表空间 - 记录 索引 存储记录 等数据 1.2.1 储存在 cd/var/lib/mysql - ll - 目录 mysql.ibd 1.3 段 - 索引 存储记录 具体存储 1.3.1 数据段 b+树 叶子节点 1.3.2 索引段 b+树的 非叶子节点 1.3.3 回滚段 1.3 区 - 1M = 16k * 64页 1.4 页 - 磁盘管理最新单

    2024年02月02日
    浏览(56)
  • 拆解零售商品架构的底层逻辑

    一、引言   在当今数字化时代,零售业正迅速发展,消费者的购物行为和期望发生了巨大的变化。为了满足不断增长的需求,零售企业必须构建高度灵活、稳健可靠的商品系统。   本文将深入探讨零售商品系统的底层逻辑,聚焦领域驱动设计(DDD)和复杂业务系统架构经验

    2024年02月08日
    浏览(41)
  • Scala 05 —— 函数式编程底层逻辑

    该文章来自2023/1/14的清华大学交叉信息学院助理教授——袁洋演讲。 函数式编程 什么是函数式编程? y=f(x) 无副作用: y只是依赖x,不会依赖其他变量 确定性关系:重新跑100次代码,得到的结果是一样的 不会给世界带来副作用。算完f(x)然后就得到了y,其他什么都没变。 什

    2024年04月29日
    浏览(39)
  • 影刀自动化采集底层逻辑

    hello,大家好,这里是【玩数据的诡途】 接上回 我的影刀故事 今天给大家介绍一下整个采集的底层逻辑,包括业务流程自动化也是基于这一套基础逻辑进行展开的,顺便带大家熟悉一下影刀,既然叫影刀系列了,那后续一些分享也理所当然的基于影刀来进行 工欲善其事必先利

    2024年02月07日
    浏览(40)
  • 软件测试的底层逻辑是什么?

    目录 什么是底层逻辑? 1. 对软件测试的基本认知 2. 软件测试的底层逻辑

    2024年02月06日
    浏览(41)
  • 打磨投资论(宏观指标篇)|底层逻辑

    前言: 根据某次美国社融通胀数据,预期CPI 3.1,实际3.0,说明通货膨胀水平减缓,有改善,加息概率减少,降息概率加大,钱流入市场的概率增加,利好股市,也利好黄金。 再根据王妈对沪指300的了解,说在某点已经是最低(目前我不知道怎么判断的),说反弹只是时间问

    2024年02月16日
    浏览(39)
  • JAVASE->数据结构|顺序表底层逻辑

    ✅作者简介:大家好,我是橘橙黄又青,一个想要与大家共同进步的男人😉😉 🍎个人主页:再无B~U~G-CSDN博客 目标: 1. 什么是 List 2. List 常见接口介绍 3. List 的使用 本章主要学习顺序表底层逻辑,大致是一样的,不差多少。 在集合框架中, List 是一个接口,继承自 Co

    2024年04月29日
    浏览(39)
  • 【C++干货铺】解密vector底层逻辑

    ========================================================================= 个人主页点击直达: 小白不是程序媛 C++系列专栏: C++干货铺 代码仓库: Gitee ========================================================================= 目录 vector介绍 vector的使用 vector的定义和使用 vector的空间增长问题 vector的增删查改

    2024年02月05日
    浏览(38)
  • 【Android】底层逻辑深入了解(学习笔记)(未完)

    step by step. 目录 init启动 Zygote进程:  SystemServer处理过程 Binder: Launcher启动过程 Android系统启动流程 四大组件 Activity Service  BroadcastReceiver广播 ContentProvider内容提供者(进程内和进程间的数据共享)  Context上下文  AMS(ActivityManagerService) (在图书馆看了《Android进阶解密》,

    2024年02月15日
    浏览(42)
  • 用这三本书,探究 ChatGPT 的底层逻辑

    最近爆火的ChatGPT能够很好地理解人类的语言,并以流畅且符合逻辑的自然语言来反馈。刚刚发布的GPT-4更是在各种学科考试(美国高考SAT、研究生入学考试GRE等)和专业考试(律师考试等)中能拿到前10%的成绩。某种程度上,智能已经接近人类的水平,这是之前人工智能系统

    2024年02月01日
    浏览(29)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包