[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源文件和头文件 模版
头文件: /********************************************************************************************** ...
随机推荐
- [转载]PHP开发环境 AppServ 2.5.10 安装及修改
[转载]PHP开发环境 AppServ 2.5.10 安装及修改 原文地址:PHP开发环境 AppServ 2.5.10 安装及修改 appserv下载地址:http://www.appservn ...
- 批处理设置IP
@echo off title 静态IP设置 set netName=本地连接 set address=192.168.1.202 netsh netsh interface ipv4 set dns ...
- 安装和配置Windows系统虚拟机
1.打开虚拟机软件,点击新建虚拟机. 2.选择典型配置,点击下一步. 3.点击安装程序光盘映像文件,选择对应的映像文件,然后点击下一步.选择对应的密钥和版本,设置密码等. 4.创建虚拟机名字和存储位置 ...
- ACM-ICPC实验室20.2.19测试-图论
B.Harborfan的新年拜访Ⅱ 就是一道tarjan缩点的裸题. 建图比较麻烦 以后遇到这种建图,先用循环把样例实现出来,再对着循环写建图公式 #include<bits/stdc++.h& ...
- 搭建robotframework环境
1.安装rf 执行命令:pip install robotframework; 2.安装seleniumlibrary库 执行命令:pip install --upgrade robotframewo ...
- Android如何运行他人工程
首先新建一个本地的新工程做对比,用记事本打开以下的几个工程文件,把本地工程文件的内容覆盖掉他人工程的文件内容,注意只覆盖两个工程共有的内容条目即可,不要删掉他人工程的其他依赖!(具体哪几个文件本人还没 ...
- Kettle-User Defined Java Class使用-大写转换
一.大写转换 (1)步骤(表输入-Java脚本-表输出) (2)配置 1)表输入 2)java脚本 public boolean processRow(StepMetaInterface smi, S ...
- oracle sys可以登录,system权限不足,解决方法
今天在自己电脑上安装了oracle 11g,安装成功后发现 sys 可以正常登录.system 无法登录,显示 ORA-01031: insufficient privileges(权限不足) sel ...
- 【PAT甲级】1096 Consecutive Factors (20 分)
题意: 输入一个int范围内的正整数,输出它最多可以被分解为多少个连续的因子并输出这些因子以*连接. trick: 测试点5包含N本身是一个素数的数据,此时应当输出1并把N输出. 测试点5包含一个2e ...
- React项目中遇到的那些坑
1.react中路由跳转后页面不置顶问题 问题: 从页面A跳转到页面B,页面A滚动到中间位置,跳转后页面B也会在中间位置 解决方法:在顶部组件的生命周期中进行判断,例如 componentWillRe ...