使用cmake

时间:2018-02-27 19:00:36

标签: cmake

我正在使用CMAKE_EXPORT_COMPILE_COMMANDS的{​​{1}}变量来获取一个json编译数据库,然后我可以解析该数据库以识别为每个源文件提供给编译器的选项。现在,我正在处理的项目有几个目标,并且在数据库中的不同目标中使用了几次源文件,如下例所示:

cmake

f.c

int main () { return MACRO; }

CMakeLists.txt

正在运行cmake_minimum_required (VERSION 2.6) project (Test) add_executable(test1 f.c) add_executable(test2 f.c) target_compile_options(test1 PUBLIC -DMACRO=1) target_compile_options(test2 PUBLIC -DMACRO=2) 将生成以下cmake . -DCMAKE_EXPORT_COMPILE_COMMANDS=1文件,其中包含compile-commands.json的两个条目,并且没有简单的方法来区分它们。

f.c

我正在寻找一种方法来指明我只对例如目标[ { "directory": "/home/virgile/tmp/cmakefile", "command": "/usr/bin/cc -DMACRO=1 -o CMakeFiles/test1.dir/f.c.o -c /home/virgile/tmp/cmakefile/f.c", "file": "/home/virgile/tmp/cmakefile/f.c" }, { "directory": "/home/virgile/tmp/cmakefile", "command": "/usr/bin/cc -DMACRO=2 -o CMakeFiles/test2.dir/f.c.o -c /home/virgile/tmp/cmakefile/f.c", "file": "/home/virgile/tmp/cmakefile/f.c" } ] ,就像您在使用test1的构建工具模式中所做的那样,最好不必修改--target,但这不是一个主要问题。另一方面,我想避免的是阅读CMakeLists.txt条目中-o的参数,并区分"command"test1.dir路径组件。

2 个答案:

答案 0 :(得分:4)

显然,此功能已在大约 3 个月前的合并请求中实现:https://gitlab.kitware.com/cmake/cmake/-/merge_requests/5651

从那里我引用:

<块引用>

新的目标属性 EXPORT_COMPILE_COMMANDS 与 现有的全局变量可用于选择性地配置目标 要导出的编译命令。

因此,您现在似乎可以在各个目标上设置一个属性,以控制它们是否包含在生成的数据库中。


此功能是 cmake 3.20 的一部分。官方文档:https://cmake.org/cmake/help/latest/prop_tgt/EXPORT_COMPILE_COMMANDS.html

答案 1 :(得分:1)

目前似乎不支持此功能。 CMake问题跟踪器中对此有一个要求:https://gitlab.kitware.com/cmake/cmake/issues/19462