使用cmake传递复合编译器选项

冈本堡

我正在尝试使用cmake的将“ compound”选项传递给编译器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保留报价。

CMake有一种特殊的字符串-列表。列表是一个字符串,其中的元素用分隔";"在编写时somefunction(A B C),实际上是在构造一个string "A;B;C",它也是3个元素的列表。但是,当您编写时,somefunction("A B C")您传递的是纯字符串。

现在,当您编写时add_compile_options("-mllvm -XYZ;-mllvm -ABC"),CMake在某种意义上做了正确的事情-它向编译器传递了两个命令行参数"-mllvm -XYZ“和” "-mllvm -ABC"。问题是clang也将这些参数也当作了两个。即,argv[i]在clangmain()指向"-mllvm -XYZ"string和clang点上将其视为单个标志。

我能看到的唯一解决方案是使用CMAKE_{C,CXX}_FLAGS设置这些标志。正如@Tsyvarev所说,完全可以使用此变量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用cmake传递复合编译器选项

来自分类Dev

使用32或64编译器的CMake

来自分类Dev

每个目标cuda编译器选项与cmake

来自分类Dev

CMAKE thrift 生成文件编译器选项

来自分类Dev

如何使用传递给编译器的相同参数在cmake中运行命令?

来自分类Dev

如何通过 CMake 传递编译器标志以使用 GTest

来自分类Dev

如何将编译器选项传递给摩卡

来自分类Dev

不需要的选项传递给编译器

来自分类Dev

不需要的选项传递给编译器

来自分类Dev

使MSBuild将任意选项传递给编译器

来自分类Dev

使用JDK 7与使用符合编译器兼容级别1.7的JDK 8有什么区别?

来自分类Dev

Qt Creator使用MinGW编译器和CMake

来自分类Dev

如何使用CMake添加编译器参数?

来自分类Dev

如何使CMake在系统PATH上使用默认编译器?

来自分类Dev

使用CMake GUI设置交叉编译器文件

来自分类Dev

XCode编译器错误,使用CMake构建的项目

来自分类Dev

如何使用<compilerarg value =“”>通过<javac> Ant任务将命令行选项传递给Java编译器?

来自分类Dev

使用WCONTINUED选项的waitpid()编译器错误

来自分类Dev

CMAKE-如何为单个文件设置不同的编译器选项

来自分类Dev

使cmake将命令行变量传递给编译器

来自分类Dev

让编译器查找Cmake创建的文件

来自分类Dev

CMake Fortran编译器相关标志

来自分类Dev

CMake找不到编译器

来自分类Dev

我可以通过编译器选项传递VisualStudio Edition名称吗?

来自分类Dev

可以将哪些参数传递给Clang编译器的-Xclang选项?

来自分类Dev

tsc未知编译器选项allowNonTsExtensions

来自分类Dev

原生比。Protoc编译器选项

来自分类Dev

编译器选项以禁用C ++“功能”

来自分类Dev

资产目录编译器选项丢失

Related 相关文章

热门标签

归档