该CMake的文件明确指出,file(GLOB ...)不建议收集源文件的生成,但它没有提什么建议的方法实际上是.
手动指定每个源文件听起来对我来说太过手动了.那么,收集源文件的正确方法是什么,如果没有
file(GLOB ...)?
Pet*_*ter 20
手动确实是推荐的方法.通过建议不使用GLOB,文档只是警告依赖于存在的文件的构建系统.例如,您要添加测试可执行文件,因此您创建了mytest.cpp.哎呀.现在您的库编译中断了.AUX_SOURCE_DIRECTORY的文档(与源文件的globbing类似)给出以下警告:
使用此命令避免编写库或可执行目标的源文件列表很有诱惑力.虽然这似乎有效,但CMake无法生成一个知道何时添加新源文件的构建系统.通常,生成的构建系统知道何时需要重新运行CMake,因为CMakeLists.txt文件被修改为添加新源.当源只是添加到目录而不修改此文件时,必须手动重新运行CMake以生成包含新文件的构建系统.
如果您确定要获取目录的所有内容,并且不打算添加新目录,那么一定要使用GLOB.
另外,不要忘记手动列出文件不必涉及键入所有文件名.例如,您可以ls *.cpp >> CMakeLists.txt使用编辑器将文件列表移动到文件中的正确位置.
spr*_*aff 15
我正确地使用GLOB,每次添加我运行的文件
touch ../src/CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
下一个make命令将重新扫描目录.
"CMake没有办法生成一个知道何时添加新源文件的构建系统"真的吗?好的,告诉它吧!
这不是100%自动,但比手动添加文件更容易.
我使用cog,一个 python 模块。以下是收集 .cpp 文件的示例:
CMakeLists.txt:
set(SRC_FILES "")
# [[[cog
# import cog, glob
# for src in glob.glob('*.cpp'):
# if "skeleton" in src: continue
# cog.outl("SET(SRC_FILES ${SRC_FILES} %s)" % src)
# ]]]
# [[[end]]]
add_library(mylib STATIC ${SRC_FILES})
Run Code Online (Sandbox Code Playgroud)
然后,运行:
python -m cogapp -r CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)
CMakeLists.txt 文件将就地更新。
关于如何安装cog以及其他使用方法,请阅读作者的文章。
| 归档时间: |
|
| 查看次数: |
11965 次 |
| 最近记录: |