【问题标题】:Get build command or all compiler flags that will be used to build a target获取将用于构建目标的构建命令或所有编译器标志
【发布时间】:2016-10-04 01:11:53
【问题描述】:

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

尝试收集和维护所有可以添加标志的属性的列表似乎不切实际。此外,CMake 必须在某处拥有此信息,因为它最终必须生成构建系统。

CMake docs 看来,此功能曾经存在,并通过调用 build_command() 提供,但已被替换:

注意在 3.0 之前的 CMake 版本中,此命令返回一个命令 直接为当前调用本机构建工具的行 生成器。

是否有一个新命令可以提供 build_command() 的旧行为?

【问题讨论】:

  • 参见例如How to use CMAKE_EXPORT_COMPILE_COMMANDS?Retrieve all link flags in CMake。您能否更具体地说明您想对命令行或所有编译器标志做什么?如果您生成例如那里的 Visual Studio 解决方案和项目甚至可能没有像命令行这样的东西。编译器标志。
  • 我认为build_command() 从来没有这样工作过。它说这将是一个调用构建工具的命令行,即make而不是编译器及其构建目标的选项。
  • 新的 CMake 文件 API 似乎支持这一点,至少在某种程度上。请参阅 API 文档的 targets 部分。
  • 请告诉我你想做什么?我做了很多实验(试图将 ABI 合规检查器集成到我的构建中 ;-),也许我有一个答案)

标签: cmake


【解决方案1】:

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

例子:

这是 Ninja Multi 的示例输出

build\CMakeFiles\impl-Release.ninja

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

【讨论】:

    【解决方案2】:

    在路径“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”中可以看到包含路径。

    【讨论】:

      【解决方案3】:

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

      无论如何,要获取源文件的所有构建标志,您可以使用COMPILE_FLAGS 属性:

      get_source_file_property(RESULT file.cpp COMPILE_FLAGS)
      

      【讨论】:

      • 该目标中使用的目标或源的COMPILE_FLAGS 属性不会评估为将使用的构建标志的完整列表。我只是在一个目标上进行了尝试,以确保如果设置了INCLUDE_DIRECTORIESCOMPILE_DEFINITIONS 之类的属性,则不会设置COMPILE_FLAGS 属性。目标中使用的随机源文件也是如此。就像 CMake 文档说的那样,看起来 COMPILE_FLAGS 用于“附加”标志 - 它不会评估将使用的所有标志。
      猜你喜欢
      • 2017-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-29
      • 1970-01-01
      相关资源
      最近更新 更多