如何解决不同语言的不同 INTERFACE 编译器选项
从 v3.20 开始,CMake 具有 target_compile_options()
command,我们可以像这样调用它:
target_compile_options(foo INTERFACE "--some-option")
这很好……只要我们只在单一语言的编译中使用 foo ,甚至使用单个编译器。但是如果我想在不同语言的编译中依赖 foo
怎么办?例如C、C++ 和 CUDA?
如何为不同语言的此类依赖项指定不同的编译选项?
解决方法
可能有一个适合您的生成器表达式:$<COMPILE_LANGUAGE:languages>
(https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html#id2)
不过我还没有在你的场景中尝试过这个。
target_compile_options(foo INTERFACE
"$<$<COMPILE_LANGUAGE:C>:--option-for-C>"
"$<$<COMPILE_LANGUAGE:CXX>:--option-for-C++>"
...
)
来自文档:
$<COMPILE_LANGUAGE:languages>
1
当用于编译单元的语言与 languages
中的任何条目匹配时,否则为 0
。此表达式可用于指定编译选项、编译定义以及在目标中包含特定语言的源文件的目录。
我目前的想法是使用虚拟目标,每个目标都有自己的接口编译选项:
add_custom_target( foo_c )
add_custom_target( foo_cpp )
add_custom_target( foo_cuda )
add_dependencies( foo_c foo )
add_dependencies( foo_cpp foo )
add_dependencies( foo_cuda foo )
target_compile_options( foo_c INTERFACE "--option-for-C" )
target_compile_options( foo_cpp INTERFACE "--option-for-C++" )
target_compile_options( foo_cuda INTERFACE "--option-for-CUDA" )
但这似乎是一团糟。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。