Cmake 获取生成命令或将用于生成目标的所有编译器标志

Cmake 获取生成命令或将用于生成目标的所有编译器标志,cmake,Cmake,是否有一种合理的方法来获取包含build命令或CMake将与目标关联的所有编译器标志的CMake变量 试图收集和维护所有可以添加标志的属性的列表似乎并不实际。此外,CMake必须在某个地方有这些信息,因为它最终必须生成一个构建系统 从中可以看出,此功能曾经存在,并且是通过调用build\u command()提供的,但此功能已被替换: 注意:在3.0之前的CMake版本中,此命令返回一个命令 直接调用当前版本的本机生成工具的行 发电机 是否有一个新命令提供了build\u command()的旧

是否有一种合理的方法来获取包含build命令或CMake将与目标关联的所有编译器标志的CMake变量

试图收集和维护所有可以添加标志的属性的列表似乎并不实际。此外,CMake必须在某个地方有这些信息,因为它最终必须生成一个构建系统

从中可以看出,此功能曾经存在,并且是通过调用
build\u command()
提供的,但此功能已被替换:

注意:在3.0之前的CMake版本中,此命令返回一个命令 直接调用当前版本的本机生成工具的行 发电机


是否有一个新命令提供了
build\u command()
的旧行为?

构建标志实际上与源文件关联,因为不同的文件可以有不同的当前标志。另一方面,在大多数情况下,这些标志是等效的

无论如何,要获取源文件的所有生成标志,可以使用属性:

get_source_file_property(RESULT file.cpp COMPILE_FLAGS)

如果您想要源文件实际编译方式的最终输出,您需要查看生成的文件。我现在真的不知道更好的方法:

例如:

这是一个忍者多人游戏的输出示例

build\cmakfiles\impl-Release.ninja

此文件将列出所有编译定义、编译器标志、包括目录、对象目录等。

在路径“cmake build debug/CMakeFiles/”下,您将找到一个名为“TopFolderOfYourProject.dir”的文件夹,cmake在其中生成其所有构建系统文件,包括一个文件“build.make”。在此文件中,您可以看到如下内容:

CMakeFiles/somepath/somesourcefile.c
    @$(CMAKE_COMMAND) -E cmake_echo_color --switch=$(COLOR) --green --progress-dir=xxx\cmake-build-debug\CMakeFiles --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/somepath/somesourcefile.c.obj"
除此之外,您还可以在文件“flags.make”中找到有关标志的额外信息,该文件包含开发人员指定的所有额外编译器标志


在“includes_C.rsp/includes_CXX.rsp”中,您可以看到includes路径。

该目标中使用的目标或源的
编译标志
属性不会计算为将使用的完整生成标志列表。我只是在一个目标上尝试了一下,如果设置了
INCLUDE\u DIRECTORIES
COMPILE\u DEFINITIONS
之类的属性,则不会设置
COMPILE\u FLAGS
属性。目标中使用的随机源文件也是如此。正如CMake文档所说,它看起来像是
COMPILE\u FLAGS
用于“附加”标志——它不会计算所有将要使用的标志。例如,请参阅或。能否请您更具体地说明您想对命令行或所有编译器标志执行什么操作?例如,如果生成Visual Studio解决方案和项目,甚至可能没有包含编译器标志的命令行。我认为
build\u command()
从未以这种方式工作过。它说它将是一个调用构建工具的命令行,即
make
,而不是编译器及其构建目标的选项。新的CMake文件API似乎至少在某种程度上支持这一点。请看API文档中的部分。请告诉我您想做什么?我做了很多实验(试图将ABI compliance checker集成到我的构建中;-),也许我有一个答案给你)