在使用 CMake 进行编译时,打印出它编译了哪些源文件,可以通过多种方式实现,以下是几种常用的方法:
1. 启用详细编译输出
通过设置 CMake 的编译输出为详细模式,可以看到编译过程中使用的所有源文件。这是最简单的方式。
方法一:使用 make 的 VERBOSE 选项
如果使用的是基于 Makefile 的构建系统(如 Unix 系统下的 make 命令),可以通过运行以下命令来启用详细输出:
bash
make VERBOSE=1
方法二:使用 CMake 变量 CMAKE_VERBOSE_MAKEFILE
也可以通过在 CMake 配置时设置 CMAKE_VERBOSE_MAKEFILE 变量来启用详细输出。你可以在 CMake 配置阶段(生成构建文件阶段)设置这个变量:
bash
cmake -DCMAKE_VERBOSE_MAKEFILE=ON ..
或者在 CMakeLists.txt 中添加:
cmake
set(CMAKE_VERBOSE_MAKEFILE ON)
这样,在每次编译时,CMake 会打印所有编译命令,包含所有编译的源文件。
2. 使用 message() 打印源文件列表
你可以在 CMakeLists.txt 中手动打印出 CMake 所编译的源文件列表。这可以通过 message() 函数来实现。假设你有一个 set() 定义的源文件列表变量(如 SOURCE_FILES),你可以在 CMakeLists.txt 中添加如下代码:
cmake
set(SOURCE_FILES
main.c
utils.c
foo.c
)
add_executable(my_executable ${SOURCE_FILES})
message(STATUS "Compiling the following source files:")
foreach(source ${SOURCE_FILES})
message(STATUS "${source}")
endforeach()
当你运行 cmake 配置时,CMake 会输出正在编译的源文件列表。
3. 打印所有编译文件(所有目标)
如果你想打印所有目标中使用的源文件,可以使用 get_property() 来获取所有源文件并打印它们。
cmake
get_property(all_targets DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY TARGETS)
foreach(target ${all_targets})
get_target_property(sources ${target} SOURCES)
message(STATUS "Target: ${target}")
foreach(source_file ${sources})
message(STATUS " Source file: ${source_file}")
endforeach()
endforeach()
这段代码会遍历所有目标并打印每个目标中使用的源文件。
4. 使用 Ninja 构建系统
如果你使用的是 Ninja 构建系统,可以通过指定 ninja 的详细输出模式来显示编译的源文件。运行以下命令:
bash
ninja -v
这会输出详细的构建信息,包含所有编译的源文件。
5. CMake 构建调试模式
CMake 还提供了调试级别的构建输出,使用 –trace 选项可以追踪 CMake 配置过程中的每一步,虽然输出内容较多,但也会包含哪些文件被用于构建。
你可以运行:
bash
cmake --trace ..
结论
最简便的方法 是使用 make VERBOSE=1 或者设置 CMAKE_VERBOSE_MAKEFILE=ON 来启用详细的编译输出。
如果你想在 CMake 配置过程中查看编译的源文件,使用 message() 或者 get_property() 方法可以手动打印出所有源文件列表。
根据你的需求选择合适的方式即可。
我要评论