[CMake笔记] CMake向解决方案添加源文件兼头文件
回顾
在上一篇笔记里总结的时候说到,aux_source_directory这个函数在添加源码文件时,是不会把头文件添加进去的,这里就介经一下另外一个方法,也是我一直使用的。
添加文件*.cpp与*.h
文件夹结构
CMakeFile
|--CMakeLists.txt
|--main.cpp
|--stdafx.h
CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.0) # 项目名称
project(CMakeFile) # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
FILE(GLOB SC_FILES "*.cpp" "*.h") # 指定生成目标
add_executable(${PROJECT_NAME} ${SC_FILES})
生成解决方案
进阶
很多时候,从第三方获取一些功能的源码文件,直接的做法可以放在我们自己的代码文件夹,像上面这样直接引入,但个人觉得这样不利于管理这些文件,特别是某些外部源码文件特别多的时候,就会觉得整个文件夹太多文件了, 很乱。我比较按功能,分放在不同的文件夹下进行管理,如下面我引入md5的相关代码(github就有):
文件夹结构
CMakeFile
|--common
| |--md5
| |--md5.cpp
| |--md5.h
|--CMakeLists.txt
|--main.cpp
|--stdafx.h
修改CMakeLists.txt
# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.0) # 项目名称
project(CMakeFile) # 设置md5代码文件的路径
set(MD5_FILE "./common/md5/md5.cpp" "./common/md5/md5.h") # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
FILE(GLOB SC_FILES "*.cpp" "*.h") # 指定生成目标
add_executable(${PROJECT_NAME} ${SC_FILES} ${MD5_FILE})
此处需要设置一个代码文件对应的路径,最后一定要把路径的值添加到生成目标上。
解决方案生成后
这里,就会发现一个问题,md5的代码文件是已经实现分文件夹存放管理了,但在解决方案里还不是分组的哦,我的强迫症又要犯了。
再进阶,解决方案源码分组
为了解决上面的问题,治愈我的强迫症,我再去看了看CMake的手册。原来此时只要在CMakeLists.txt添加一行脚本,调用一个source_group函数就行了:
# CMake 最低版本号要求
cmake_minimum_required(VERSION 3.0) # 项目名称
project(CMakeFile) # 设置md5代码文件的路径
set(MD5_FILE "./common/md5/md5.cpp" "./common/md5/md5.h") # 查找指定目录下的所有.cpp与.h文件 并存放到指定变量名SC_FILES中
FILE(GLOB SC_FILES "*.cpp" "*.h") # 对md5的源码分组到md5组里
source_group(md5 FILES ${MD5_FILE}) # 指定生成目标
add_executable(${PROJECT_NAME} ${SC_FILES} ${MD5_FILE})
解决方案再生成后
这里需要注意的是,对CMakeList.txt的其他修改在重新生成后,VS都会提示重新加载解决方案的,但调用source_group函数时,解决方案是不会自动加载的,需要关闭VS重新打开项目。
[CMake笔记] CMake向解决方案添加源文件兼头文件的更多相关文章
- 使用STC-ISP向KEIL添加STC芯片头文件
第一步:打开“STC-ISP”软件. 第二步:点击右手边“Keil仿真设置”,然后点击“添加型号和头文件到Keil中添加STC仿真器驱动到Keil中”. 第三步:在弹出的“浏览文件夹”对话框中,找到你 ...
- 【Keil】Keil5添加源程序和头文件
xxx.c就是源程序 xxx.h就是头文件 [源程序添加方法] 双击文件夹,例如图片上的Source,跳出弹窗,选择需要添加的源程序即可 [添加头文件的方法] 1.首先点击图片红框处,或是在文件夹te ...
- eclipse C开发添加自己的头文件搜索路径
eclipse编译C程序时提示: ..\src\main.c:8:21: fatal error: my_type.h: No such file or directory 如图: 需要添加自己的头文 ...
- 对c&c++源文件和头文件分开的好处的一点认识
对c&c++程序来说,基本上来说都是要把源文件和头文件分别编写.一般都是代表一个基本功能的源文件引用相应的头文件. 一个 相关功能的模块可能有若干对源文件和头文件组成.这是基于组件编程的核心. ...
- Cmake 脚本对项目输出路径和输出头文件的路径定义
对Lib项目的统一输出路径以下时解决方案: set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/Lib)set(CMAKE_LIBRARY_O ...
- C学习笔记(9)--- 预处理器,头文件
1.预处理器: 预处理器不是编译器的组成部分,但是它是编译过程中一个单独的步骤.简言之,C 预处理器只不过是一个文本替换工具而已,它们会指示编译器在实际编译之前完成所需的预处理. 我们将把 C 预处理 ...
- [理解] C++ 中的 源文件 和 头文件
我是学 C井 的, 现在在工作中主要使用的编程语言是 Java, 还记得当初在第一次接触到 Cpp 的时候, 听到的第一个概念就是 Cpp 的头文件和源文件, 当初理解了好久, 死活都弄不明白, 现在 ...
- QT:创建一个widget,包含源文件,头文件,以及ui文件
1. 安装QT 2. 在QT Welcome画面,点击 New Project 3. 选择Application--Qt Widgets Application 4. 按提示创建即可 文件目录如下: ...
- C源文件和头文件 模版
头文件: /********************************************************************************************** ...
随机推荐
- scp--linux命令
不同服务器之间传输文件, 第一种方式: scp TC_20171230_RCE_15_37_34_build-20.tar.gz test@192.168.18.90://data/build/ 缺点 ...
- December 31st, Week 53rd Tuesday, 2019
Nothing comes from nothing. 天下没有免费的午餐. Nothing comes from nothing, and in some cases, even something ...
- 史上最全CentOS6离线安装部署Cloudera Manager5.9.3
史上最全CentOS6离线安装部署Cloudera Manager5.9.3
- [转]Serverless
说起当前最火的技术,除了最新的区块链,AI,还有一个不得不提的概念是Serverless.Serverless作为一种新型的互联网架构直接或间接推动了云计算的发展,从AWS Lambda到阿里云函数计 ...
- pod的状态及操作
查看pod的标签 [root@master pod]# kubectl get pods --show-labels NAME READY STATUS RESTARTS AGE LABELS cv- ...
- spring与jdbc,mybatis的结合
关键点在于把DataSource(数据源)配置到spring容器中,通过数据源获取数据库连接对象 数据库连接池(pool):管理数据库连接对象 四种数据源: 1)<!-- 基于jdk的规范数据源 ...
- 吴裕雄 python 神经网络——TensorFlow 图、张量及会话
import tensorflow as tf g1 = tf.Graph() with g1.as_default(): v = tf.get_variable("v", [1] ...
- 定位布局 Stack 层叠组件 Stack 与 Align Stack 与 Positioned 实现
一.Flutter Stack 组件 Stack 表示堆的意思,我们可以用 Stack 或者 Stack 结合 Align 或者 Stack 结合 Positiond 来实现页面的定位布局 align ...
- 解决 上下拉的橡皮筋 和 复制无效 和 ios滑动屏幕定时器停止问题cordova
cordova 安装插件cordova plugin add cordova-plugin-wkwebview-engine@latest --save config.xml 的 <platfo ...
- Scrapy 命令
Scrapy提供了两种类型的命令.一种必须在Scrapy项目中运行(针对项目(Project-specific)的命令),另外一种则不需要(全局命令).全局命令在项目中运行时的表现可能会与在非项目中运 ...