当前位置: 首页 > news >正文

CMakeList.txt

CMakeList.txt的写法

  • 前言
  • 一个最近写好的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库的话,可以简单修改一下:
在这里插入图片描述

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

CMakeList.txt的写法 前言一个最近写好的CMakeList.txt对上边CMakeList.txt的说明修改 前言 复习一下CMakeList.txt的写法,以下面的一个CMakeList.txt为例 一个最近写好的CMakeList.txt cmake_minimum_required(VERSION 3.17)project(QtVTKProject)# INCLUSION OF Qt # set(…...

华为云使用脚本初始化Linux数据盘

初始化新挂载的磁盘 登录云服务器,执行以下命令获取自动初始化磁盘脚本。 wget https://ecs-instance-driver.obs.cn-north-1.myhuaweicloud.com/datadisk/LinuxVMDataDiskAutoInitialize.sh 说明: 若回显异常,请检查云服务器是否绑定弹性公…...

leetcode 129. 求根节点到叶节点数字之和

2023.9.8 好久没写回溯题了,有点陌生ToT。 本题思路就是通过回溯保存所有根节点到叶子节点的路径,然后将这些路径转化为数字并全部相加。 直接看代码: /*** Definition for a binary tree node.* struct TreeNode {* int val;* Tre…...

嵌入式开发-11 Linux下GDB调试工具

目录 1 GDB简介 2 GDB基本命令 3 GDB调试程序 1 GDB简介 GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。 一般来说,GDB主要帮助你完成下面四个方面的功能: 1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序&#…...

Java测试(11) --- selenium

测试用例方法以teat_开头 运行脚本的时候默认自动会运行test_开头的方法普通方法不以test_开头 普通方法被test_开头的方法调用的时候才会运行测试套件,把不同文件里的不同类里面的不同的测试方法组织起来放在一起运行(1)addTest 把不同…...

vue3 defineExpose 显示的指定组件需要暴露的属性

简介&#xff1a; 是 vue3 新增的一个 api &#xff0c;用在 <script setup>中使用&#xff0c;用于显示的把组件的属性和方法暴露出来。可用于父子组件通信&#xff0c;子组件使用 defineExpose 将自身的方法或者属性暴露出去&#xff0c;父组件中通过 ref 获取子组件 D…...

算法通关村第十七关:黄金挑战-跳跃游戏问题

黄金挑战-跳跃游戏问题 1. 跳跃游戏 LeetCode 55 https://leetcode.cn/problems/jump-game/ 思路分析 关键是判断能否到达终点&#xff0c;不用管每一步跳跃到哪里&#xff0c;而是尽可能的跳跃到最远的位置 看最多能覆盖到哪里&#xff0c;只要不断更新能覆盖的距离&#x…...

Git GitHub GitLab

1、Git Git是一个开源的分布式版本控制系统&#xff0c;是一种工具软件&#xff0c;用于代码的存储和版本控制。 2、GitHub GitHub是一个基于Git实现的在线代码仓库&#xff0c;是目前全球最大的代码托管平台。 3、GitLab GitLab也是一个基于Git实现的在线代码仓库&#x…...

前端的规范

假如团队中的小伙伴在提交代码时没有遵循规范要求&#xff0c;只写了一个"fix"或"update&#xff0c;这会给其他小伙伴造成困扰&#xff0c;不得不花时间查看代码和推测逻辑。 不仅会浪费了时间和精力&#xff0c;可能会导致项目以下问题&#xff1a; 可读性差…...

嵌入式软件有限状态机的 C 语言实现

状态机模式是一种行为模式&#xff0c;通过多态实现不同状态的调转行为的确是一种很好的方法&#xff0c;只可惜在嵌入式环境下&#xff0c;有时只能写纯C代码&#xff0c;并且还需要考虑代码的重入和多任务请求跳转等情形&#xff0c;因此实现起来着实需要一番考虑。 近日在看…...

面试题常考:LRU缓存

题目&#xff1a; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&…...

Redis 教程 - 持久化

Redis 教程 - 持久化 在 Redis 中&#xff0c;持久化是指将数据从内存保存到磁盘上&#xff0c;以便在重启或服务器故障后仍能恢复数据。Redis 提供了两种持久化方式&#xff1a;RDB&#xff08;Redis Database&#xff09;和 AOF&#xff08;Append-Only File&#xff09;。本…...

2023 大学生数学建模竞赛-C题-第一问

题目&#xff1a; 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销…...

设计模式3 观察者模式

一 观察者模式 1.1 概述 观察者模式是一种行为模式&#xff0c;又称之为“发布/订阅”模式&#xff0c;在该模式中被观察的对象叫主题&#xff0c;依赖主题的对象被称为观察者&#xff0c;当主题发生改变时&#xff0c;会通知所有观察者进行更新。多个对象存在一对多的关系&a…...

如何防止网络安全攻击

为了防止网络安全攻击&#xff0c;以下是一些常见的防御措施和建议&#xff1a; 使用强密码&#xff1a;确保使用足够长、复杂且随机的密码&#xff0c;并定期更改密码。不要在多个账户中重复使用相同的密码。 更新和修补软件&#xff1a;定期更新操作系统、应用程序和安全补丁…...

怎么从0到1实现一个PHP框架?

写在前面 本人开发的框架在2021年年初开发完成&#xff0c;后面没有再做过任何维护和修改。是仅供大家参考交流的学习项目&#xff0c;请勿使用在生产环境&#xff0c;也勿用作商业用途。 框架地址&#xff1a; https://github.com/yijiebaiyi/fast_framework 整体思路 开发…...

脚本:python实现樱花树

文章目录 代码效果 代码 from turtle import * from random import * from math import * def tree(n, l):pd () # 下笔# 阴影效果t cos ( radians ( heading () 45 ) ) / 8 0.25pencolor ( t, t, t )pensize ( n / 3 )forward ( l ) # 画树枝if n > 0:b random () *…...

公司内部传文件怎么安全——「用绿盾透明加密软件」

为保证公司内部文件传递的安全性&#xff0c;可以使用天锐绿盾透明加密软件来进行保护。以下是具体的操作步骤&#xff1a; 在公司内部部署天锐绿盾加密软件&#xff0c;确保需要传递的文件都能受到加密保护。 在员工的工作电脑上安装天锐绿盾客户端&#xff0c;并设置好相关的…...

提高使用VS Code工作效率的技巧

提高使用VS Code工作效率的技巧 时间轴视图&#xff1a;本地源代码控制 时间轴视图为我们提供了内置的源代码控制。 我们中的许多人都知道 Git 和其他源代码控制工具有多么有用&#xff0c;它们可以帮助我们轻松跟踪文件更改并在需要时恢复到之前的状态。 因此&#xff0c;…...

软件系统兼容性测试都要注意哪些问题?

兼容性 软件兼容性测试具有相同的含义&#xff0c;它是任何第三方 Web 应用程序测试服务不可分割的一部分。在众多不同的设置中&#xff0c;最重要的是完全的客户满意度&#xff0c;并且可以通过全面的兼容性测试来达到最佳效果。众所周知&#xff0c;软件质量保证是克服 IT 挑…...

BinaryBomb通关后,我总结了这6个Linux调试与逆向的‘骚操作’

BinaryBomb通关后&#xff0c;我总结了这6个Linux调试与逆向的‘骚操作’ 在计算机系统基础课程中&#xff0c;BinaryBomb实验堪称是检验学生调试与逆向能力的"试金石"。作为一位刚刚通关的"拆弹专家"&#xff0c;我想分享那些教科书上不会教、却能让你效率…...

3种免费方法解锁加密音乐:Unlock-Music让你的音乐重获自由

3种免费方法解锁加密音乐&#xff1a;Unlock-Music让你的音乐重获自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: h…...

【DeepSeek事实准确性测试权威报告】:2024年7大维度实测数据揭穿幻觉率真相

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;DeepSeek事实准确性测试权威报告总览 本报告基于2024年Q3由AI Safety Benchmark Consortium&#xff08;ASBC&#xff09;主导的跨模型事实一致性评估项目&#xff0c;对DeepSeek-V2、DeepSeek-Coder-3…...

AArch64 SCTLR_EL3寄存器解析与安全配置实践

1. AArch64 SCTLR_EL3系统控制寄存器深度解析在Armv8-A/v9-A架构的安全世界中&#xff0c;SCTLR_EL3寄存器扮演着系统控制中枢的角色。作为EL3&#xff08;最高特权级别&#xff09;的系统控制寄存器&#xff0c;它直接决定了安全监控模式&#xff08;Secure Monitor&#xff0…...

肺部X光AI诊断系统:五分类模型实战与临床可解释性

1. 项目概述&#xff1a;当X光片遇上深度学习——一个肺部疾病AI诊断系统的实操手记 我做医疗影像AI项目快七年了&#xff0c;从最早在医院信息科帮放射科老师写脚本批量重命名DICOM文件&#xff0c;到后来带着学生团队在基层医院部署轻量级肺炎筛查工具&#xff0c;踩过的坑比…...

校园便利|基于java+vue的校园便利平台(源码+数据库+文档)

校园便利平台 基于SprinBootvue的校园便利平台 一、前言 二、系统设计 三、系统功能设计 系统前台实现 系统首页功能 用户后台管理功能 管理员功能实现 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍…...

百度GEO优化是什么意思

这是很多国内企业主都会问的问题。因为在大多数人的认知中&#xff0c;“搜索百度”&#xff0c;所以一提到GEO&#xff0c;自然联想到百度。百度GEO优化&#xff0c;指的是在百度搜索引擎及其AI生态产品中&#xff0c;围绕百度AI生成的答案模块进行的品牌可见性优化。这包含两…...

嵌入式开发为何首选C语言?深入解析其核心优势与实战应用

1. 项目概述&#xff1a;嵌入式世界的“通用语”如果你刚踏入嵌入式开发的大门&#xff0c;或者正从其他编程领域转过来&#xff0c;可能会有一个疑问&#xff1a;为什么满世界都在用C语言&#xff1f;从你手上那块小小的单片机&#xff0c;到家里的智能路由器&#xff0c;再到…...

AI Agent 工具调用系统设计:让大模型掌控世界

AI Agent 工具调用系统设计&#xff1a;让大模型掌控世界 前言 工具调用&#xff08;Tool Use / Function Calling&#xff09;是 AI Agent 实现复杂任务的关键能力。通过工具调用&#xff0c;大模型可以与外部世界交互&#xff0c;执行计算、查询数据库、调用 API&#xff0c;…...

如何完全掌控联想拯救者笔记本性能:5个高效配置秘籍

如何完全掌控联想拯救者笔记本性能&#xff1a;5个高效配置秘籍 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 想要彻底释放…...