首页 > 其他分享 >在CMakeLists.txt中添加源文件的几种方法

在CMakeLists.txt中添加源文件的几种方法

时间:2024-05-20 10:19:28浏览次数:27  
标签:CMakeLists txt target executable 源文件 sources add cpp main

单个.cpp源文件的情况

用这段代码进行测试,CMake 中添加一个可执行文件作为构建目标:

#include <cstdio>

int main() {
    printf("Hello, world!\n");
}

指定源文件的时候可以有两种方式

在创建目标的时候直接指定源文件

add_executable(main main.cpp)

先创建目标,再添加源文件

add_executable(main)
target_sources(main PUBLIC main.cpp)

多个.cpp源文件的情况

.
├── CMakeLists.txt
├── main.cpp
├── other.cpp
└── other.h

使用target_sources直接添加

逐个添加即可:

add_executable(main)
target_sources(main PUBLIC main.cpp other.cpp)

通过设定变量,间接添加

使用变量来存储:

add_executable(main)
set(sources main.cpp other.cpp)
target_sources(main PUBLIC ${sources})
在使用变量的值时,要用美元符号$加花括号来进行取值。

建议把头文件也加上,这样在 VS 里可以出现在“Header Files”一栏。

add_executable(main)
set(sources main.cpp other.cpp other.h)
target_sources(main PUBLIC ${sources})

使用GLOB自动查找

使用 GLOB 自动查找当前目录下指定扩展名的文件,实现批量添加源文件:

add_executable(main)
file(GLOB sources *.cpp *.h)
target_sources(main PUBLIC ${sources})

推荐启用 CONFIGURE_DEPENDS 选项,当添加新文件时,自动更新变量

add_executable(main)
file(GLOB sources CONFIGURE_DEPENDS *.cpp *.h)
target_sources(main PUBLIC ${sources})

源码放在子文件夹里怎么办?

.
├── CMakeLists.txt
├── main.cpp
└── mylib
    ├── other.cpp
    └── other.h

出于管理源码的需要,需要把源码放在子文件夹中。

想要添加在子文件夹中的源码有三种办法。

把路径名和后缀名的排列组合全部写出来(不推荐)·

虽然能用,但是不推荐。

add_executable(main)
file(GLOB sources CONFIGURE_DEPENDS *.cpp *.h mylib/*.cpp mylib/*.h)
target_sources(main PUBLIC ${sources})

用 aux_source_directory 自动搜集需要的文件后缀名(推荐)

add_executable(main)
aux_source_directory(. sources)
aux_source_directory(mylib sources)
target_sources(main PUBLIC ${sources})

通过 GLOB_RECURSE 自动包含所有子文件夹下的文件

add_executable(main)
file(GLOB_RECURSE sources CONFIGURE_DEPENDS *.cpp *.h)
target_sources(main PUBLIC ${sources})

GLOB_RECURSE 的问题

会把 build 目录里生成的临时 .cpp 文件(CMake会自动生成一些cpp文件用于测试)也加进来。

解决方案

  • 要么把源码统一放到 src 目录下,
  • 要么要求使用者不要把 build 放到和源码同一个目录里,

建议把源码放到 src 目录下。

标签:CMakeLists,txt,target,executable,源文件,sources,add,cpp,main
From: https://www.cnblogs.com/lidabo/p/18201325

相关文章

  • [20240515]vim bccalc_XXX.vim使用插件简介.txt
    [20240515]vimbccalc_XXX.vim使用插件简介.txt--//这是我改写vim.org网站的一个调用bc做计算的一个插件bccalc.vim,感觉自己越写越复杂.做一个介绍,便于自己查阅.--//另外注意如果选择多行,结尾要像C语言一样使用分号(;).--//我已经统一在selectvisualnormal模式都是<leader>作......
  • [20240515]建立完善t2sh.sql脚本.txt
    [20240515]建立完善t2sh.sql脚本.txt--//建立一个简单输入简单文本计算sql_id,hash_values的sql脚本,主要用于简单sql语句以及对象的full_hash_value,sql_id,hash_value计算.--Copyright2023lfree.Allrightsreserved.--LicensedundertheApacheLicense,Version2.0.Se......
  • [20240516]建立完善vim bccalc_linux.vim插件.txt
    [20240516]建立完善vimbccalc_linux.vim插件.txt--//同步对linux版本做了修改,我自己很少使用,没有测试.--//安装很简单的拷贝到plugin,目录.$catbccalc_linux.vim""calculateexpressionenteredoncommandlineandgiveanswer,e.g.:"":Calculatesin(3)+sin(4)^2......
  • [20240516]建立任意进制转10进制脚本xto10.sql脚本.txt
    [20240516]建立任意进制转10进制脚本xto10.sql脚本.txt--//bashshell64进制编码从0开始.0-9,a-z,A-Z.这样仅仅62个编码.还剩下2个.@_--//这样完整的编码如下:$base64=$(echo{0..9}{a..z}{A..Z}@_)$echo$base640123456789abcdefghijklmnop......
  • [20240518]任意进制转换xtoy.sql脚本.txt
    [20240518]任意进制转换xtoy.sql脚本.txt--//前几天尝试改进10进制转任意进制,以及其他进制转10进制脚本,有了这两个脚本就可以通过10进制实现任意进制的转换.$cat10tox.sqlsettermoffcolumn2new_value2selectnull"2"fromdualwhere1=2;selectnvl('&2',16)"2"from......
  • [20240510]SQL语句存在问题与共享池内存分配.txt
    [20240510]SQL语句存在问题与共享池内存分配.txt--//五一前遇到的问题,生产系统应用程序升级,但是3个表忘记建立,而编写的程序可能存在问题,导致频繁调用这些根本不可能执行的sql--//语句.很奇怪的是应用前台根本不报错,真不知道开发如何写代码,难道没做例外处理以及记录吗?--//测......
  • [20240511]测试问题sql语句对数据库性能影响.txt
    [20240511]测试问题sql语句对数据库性能影响.txt--//五一前遇到的问题,生产系统应用程序升级,但是3个表忘记建立,而编写的程序可能存在问题,导致频繁调用这些根本不可能执行的sql--//语句,正常情况下应该报ORA-00942:tableorviewdoesnotexist,很奇怪的同事反映应用前台根本......
  • [20240511]建立10进制转任意进制10tox.sql脚本.txt
    [20240511]建立10进制转任意进制10tox.sql脚本.txt--//翻开以前笔记,找到1个脚本10x.sql(改名10tox.sql),可以实现10进制转任意进制.受字符集限制最大64进制.--//bashshell64进制编码从0开始.0-9,a-z,A-Z.这样仅仅62个编码.还剩下2个.@_,以该编码为基础来实现--//bashshel......
  • [20250511]建立完善s2h.sql脚本.txt
    [20250511]建立完善s2h.sql脚本.txt--//写过一个sql_id计算hash_value的bashshell脚本,实际上oracle使用dbms_utility.SQLID_TO_SQLHASH就可以实现,$cats2h.sql--Copyright2023lfree.Allrightsreserved.--LicensedundertheApacheLicense,Version2.0.SeeLICENSE......
  • [20240512]建立完善sql_idz.sh脚本.txt
    [20240512]建立完善sql_idz.sh脚本.txt--//使用该脚本计算存在小问题,cat文件中如果有ascii=0,cat时会过滤掉,一般tablenamespac是1.--//在尾部追加\01\0\0\0,而sql语句追加的是\0.我以前代码写死的.修改更加灵活一些.--//增加参数3,如果不输入缺省等于\0.--//增加计算exact_mat......