【问题标题】:Change compiler invocation in CMake在 CMake 中更改编译器调用
【发布时间】:2017-04-21 23:03:44
【问题描述】:

如果我在 CMake 中使用 clang 编译器,我想为每个可能的调用添加选项 -cc1(更好:仅针对某个目标)

我尝试过使用

set(CMAKE_CXX_COMPILER "${CMAKE_CXX_COMPILER} -cc1")

但这会将调用包含在引号中;因此,这在我的 shell 中不会被识别为有效命令。

如果我使用

set(CMAKE_CXX_COMPILER ${CMAKE_CXX_COMPILER} -cc1)

然后我在 clang 调用和 -cc1 选项之间得到一个分号。这也行不通。

如何让 CMake 将 /path/to/clang 更改为 /path/to/clang -cc1 ?

【问题讨论】:

  • 我认为你可以使用类似this 所以target_compile_options(target PUBLIC "-cc1")。
  • @Winestone 是的,这是可能的,但我需要在其他 target_compile_options 已经设置之后“添加” cc1 选项;也许我太努力了。
  • 试试target_compile_options(target BEFORE PUBLIC "-cc1")。
  • 将它放在 target_include_directories 之后,而不是在编译器调用之后。
  • 我能想到的一种 hacky 方法是制作一个脚本,将它的参数转发给 clang,比如 /path/to/clang -cc1 "$@",然后将 CMAKE_CXX_COMPILER 设置为那个。

标签: c++ cmake clang


【解决方案1】:

针对特定于 clang 的需求的一种解决方法是使用 -Xclang 编译器选项,这会强制 clang 驱动程序将其后面的选项传递给 clang -cc1。

例如:

target_compile_options(${target} PUBLIC "-Xclang -include-pch ${output}")

【讨论】:

    【解决方案2】:

    见:cmake CFLAGS CXXFLAGS modification

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -cc1")
    

    对于单个目标:

    target_compile_options(target -cc1)
    

    【讨论】:

    • 从 cmets 和我的问题来看,这不起作用
    猜你喜欢
    • 1970-01-01
    • 2014-10-23
    • 1970-01-01
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多