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 显示的指定组件需要暴露的属性
简介: 是 vue3 新增的一个 api ,用在 <script setup>中使用,用于显示的把组件的属性和方法暴露出来。可用于父子组件通信,子组件使用 defineExpose 将自身的方法或者属性暴露出去,父组件中通过 ref 获取子组件 D…...
算法通关村第十七关:黄金挑战-跳跃游戏问题
黄金挑战-跳跃游戏问题 1. 跳跃游戏 LeetCode 55 https://leetcode.cn/problems/jump-game/ 思路分析 关键是判断能否到达终点,不用管每一步跳跃到哪里,而是尽可能的跳跃到最远的位置 看最多能覆盖到哪里,只要不断更新能覆盖的距离&#x…...
Git GitHub GitLab
1、Git Git是一个开源的分布式版本控制系统,是一种工具软件,用于代码的存储和版本控制。 2、GitHub GitHub是一个基于Git实现的在线代码仓库,是目前全球最大的代码托管平台。 3、GitLab GitLab也是一个基于Git实现的在线代码仓库&#x…...
前端的规范
假如团队中的小伙伴在提交代码时没有遵循规范要求,只写了一个"fix"或"update,这会给其他小伙伴造成困扰,不得不花时间查看代码和推测逻辑。 不仅会浪费了时间和精力,可能会导致项目以下问题: 可读性差…...
嵌入式软件有限状态机的 C 语言实现
状态机模式是一种行为模式,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑。 近日在看…...
面试题常考:LRU缓存
题目: 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值&…...
Redis 教程 - 持久化
Redis 教程 - 持久化 在 Redis 中,持久化是指将数据从内存保存到磁盘上,以便在重启或服务器故障后仍能恢复数据。Redis 提供了两种持久化方式:RDB(Redis Database)和 AOF(Append-Only File)。本…...
2023 大学生数学建模竞赛-C题-第一问
题目: 在生鲜商超中,一般蔬菜类商品的保鲜期都比较短,且品相随销售时间的增加而变差, 大部分品种如当日未售出,隔日就无法再售。因此,商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销…...
设计模式3 观察者模式
一 观察者模式 1.1 概述 观察者模式是一种行为模式,又称之为“发布/订阅”模式,在该模式中被观察的对象叫主题,依赖主题的对象被称为观察者,当主题发生改变时,会通知所有观察者进行更新。多个对象存在一对多的关系&a…...
如何防止网络安全攻击
为了防止网络安全攻击,以下是一些常见的防御措施和建议: 使用强密码:确保使用足够长、复杂且随机的密码,并定期更改密码。不要在多个账户中重复使用相同的密码。 更新和修补软件:定期更新操作系统、应用程序和安全补丁…...
怎么从0到1实现一个PHP框架?
写在前面 本人开发的框架在2021年年初开发完成,后面没有再做过任何维护和修改。是仅供大家参考交流的学习项目,请勿使用在生产环境,也勿用作商业用途。 框架地址: 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 () *…...
公司内部传文件怎么安全——「用绿盾透明加密软件」
为保证公司内部文件传递的安全性,可以使用天锐绿盾透明加密软件来进行保护。以下是具体的操作步骤: 在公司内部部署天锐绿盾加密软件,确保需要传递的文件都能受到加密保护。 在员工的工作电脑上安装天锐绿盾客户端,并设置好相关的…...
提高使用VS Code工作效率的技巧
提高使用VS Code工作效率的技巧 时间轴视图:本地源代码控制 时间轴视图为我们提供了内置的源代码控制。 我们中的许多人都知道 Git 和其他源代码控制工具有多么有用,它们可以帮助我们轻松跟踪文件更改并在需要时恢复到之前的状态。 因此,…...
软件系统兼容性测试都要注意哪些问题?
兼容性 软件兼容性测试具有相同的含义,它是任何第三方 Web 应用程序测试服务不可分割的一部分。在众多不同的设置中,最重要的是完全的客户满意度,并且可以通过全面的兼容性测试来达到最佳效果。众所周知,软件质量保证是克服 IT 挑…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
【算法训练营Day07】字符串part1
文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接:344. 反转字符串 双指针法,两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
