让我们假设我有一个Cmake C项目,并且我在项目中有如下内容:
project(my_project C CXX ASM)
set(my_executable_sources
main.c
file_one.c
)
set(my_executable_sources ${my_executable_sources} file_two.c)
add_executable(my_executable
${my_executable_sources}
file_three.c
)
假设我在./build
子文件夹中,并且cmake ../ -G "Unix Makefiles"
已经成功通过。
我可以使用cmake
从命令行查询构建信息吗?
例如,这里我感兴趣的是my_executable
的源文件的 final 列表;有没有一个命令可以很容易地检索它们?比如说,像下面的伪代码:
$ cmake --pseudo-query-build --project="my_project" --target="my_executable" --query="source_files"
my_executable source files:
main.c
file_one.c
file_two.c
file_three.c
2条答案
按热度按时间toe950271#
我没有看到任何独立于cmake生成器的方法来实现这一点,即使你知道生成器在使用生成的项目文件。
您可以修改您的项目以包括一个打印源代码的自定义目标:
这允许您使用
以打印源,即使源中使用了生成器表达式。
注意:这将在一行中打印所有文件;要在单独的行中获取所有文件名,您可以使用
-P
选项运行cmake,通过-D
传递源,并添加逻辑以在cmake脚本文件中每行打印一个文件名。另外,在配置过程中将
CMAKE_EXPORT_COMPILE_COMMANDS
变量设置为True
可能会生成允许提取信息的json文件,但您需要一个json解析器来提取信息。此外,这种方法只适用于Makefile和Ninja CMake生成器。另外,我不确定您是否可以在所有情况下分辨出源文件属于哪个目标。xfyts7mz2#
首先通过以下行获取目标的源代码(
add_executable
之后):然后在文件末尾(
add_executable
之后)继续执行一个简单的行编辑:有关可用目标属性的完整列表,请参阅此链接。
编辑2:正如我现在注意到的,您可能只打算在CLI中使用它,那么对于我的解决方案,您还必须使用
if/endif
来封装它,该if/endif
检查definition
(例如if(SOURCES_DEBUG_INFO)
),然后使用-DSOURCES_DEBUG_INFO=TRUE
来运行它