如何打印出cmake编译了哪些源文件


在使用 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() 方法可以手动打印出所有源文件列表。

根据你的需求选择合适的方式即可。


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.11000011.com/?id=708

« 上一篇 下一篇 »

我要评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

主机推荐

  • 搬瓦工