哪个变量用于CMake的ADD_LIBRARY函数的编译器标志?

时间:2017-03-09 12:57:37

标签: c++ cmake shared-libraries compiler-flags

是否存在一个变量,其中包含在对CMake的ADD_LIBRARY函数的某些调用中使用的编译器标志,例如我们添加模块时使用的那些:

ADD_LIBRARY(mylib MODULE mysrc.cpp)

或者,有没有办法获得这样的旗帜?

1 个答案:

答案 0 :(得分:0)

将我的评论转化为答案

没有一个CMake变量可以获取所有编译器标志。问题是CMake生成器最终将编译器标志(来自各种CMake变量和属性,包括来自依赖目标)放在一起。所以在配置步骤中你没有所有的标志。

我看到以下可能的问题/解决方案对:

  • CMake是围绕编译器的跨平台包装器(实际上是C所代表的),因此无需将编译器标志提取到外部脚本中
  • 如果您只想在CMake调用的内容中添加一种过滤器,您可以设置"启动器"变量/属性,例如, CMAKE_CXX_COMPILER_LAUNCHERRULE_LAUNCH_LINK
  • 如果您希望以机器可读的JSON格式调用编译器,可以通过设置CMAKE_EXPORT_COMPILE_COMMANDS
  • 来导出它们
  • 如果您只是想看到编译器调用incl。您可以设置的所有标志CMAKE_VERBOSE_MAKEFILE
  • 如果你真的只需要输出上的编译器标志,并且你不希望CMake实际编译任何东西,你可以 - 至少对于CMake的Makefile生成器 - 修改{{3}和CMAKE_CXX_COMPILE_OBJECT这样:

    set(CMAKE_DEPFILE_FLAGS_CXX "")
    set(
        CMAKE_CXX_COMPILE_OBJECT 
        "<CMAKE_COMMAND> -E echo <FLAGS>"
    )
    set(
        CMAKE_CXX_CREATE_SHARED_MODULE 
        "<CMAKE_COMMAND> -E echo <CMAKE_SHARED_MODULE_CXX_FLAGS> <LINK_FLAGS> <CMAKE_SHARED_MODULE_CREATE_CXX_FLAGS>"
    )
    
    file(WRITE mysrc.cpp "")
    add_library(mylib MODULE mysrc.cpp)
    

<强>参考