【发布时间】:2016-02-12 14:39:25
【问题描述】:
我正在尝试使用 cmake 的 add_compile_options 将“复合”选项传递给编译器。
也就是说,涉及两个(或更多)标志的选项必须按特定顺序传递,并且即使它们已经传递给编译器,也不能省略任何标志。
一个例子是必须通过 clang 传递给 llvm 的所有 llvm 选项,例如,-mllvm -ABC -mllvm -XYZ -mllvm ...。
我不希望使用 CMake 的反模式 set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mllvm -ABC"),而是使用像 check_cxx_compiler_flag(flag available) + add_compile_option(flag) 这样可移植的东西。
但是,add_compile_options(-mllvm -XYZ -mllvm -ABC) 失败,因为 -mllvm 选项被缓存并且只传递一次,因此传递 -mllvm -XYZ -ABC 会导致错误。
此外,使用引号 "" 并没有帮助,因为那时引号也被传递(即它们没有被剥离),这也会导致错误。
用 CMake 传递这些选项的惯用方式是什么?
【问题讨论】:
-
第一次听说手动附加到
CMAKE_CXX_FLAGS是antipattern。在特定情况下,它看起来是正确的解决方案。 -
add_compile_options("-mllvm -XYZ;-mllvm -ABC")不工作吗? -
@arrowd no 这不起作用,因为它不会修剪引号 "" 所以它添加了例如
clang++ .... "-mllvm -XYZ;-mllvm -ABC"无效。