【发布时间】:2017-10-22 16:22:41
【问题描述】:
我有一个包含 3 个库的简单 CMake (3.9.4) 项目。
基本库是一个 INTERFACE 库(仅标题)。它使用了 Visual Studio 中存在的 C++17 中的一些功能(例如 constexpr if)。显然我尝试设置一个目标属性,以便它传播到依赖库。
我试过了:
target_compile_features(my_lib INTERFACE cxx_std_17)
但什么都没有改变。
第二次尝试是:
set_target_properties(my_lib PROPERITES CXX_STANDARD 17)
但我明白了:
CMake Error at cpp/CMakeLists.txt:20 (set_target_properties):
INTERFACE_LIBRARY targets may only have whitelisted properties. The
property "CXX_STANDARD" is not allowed.
最后我得到了:
target_compile_options(bit INTERFACE /std:c++17)
效果很好。这是一个正确的解决方案吗?看看所有的编译特性,我相信我应该可以做一些更好的事情。这也迫使我将上述命令包装在某种if(MSVC) ... endif() 恶作剧中。
【问题讨论】:
-
请包含您在第二次尝试时遇到的错误。
标签: c++ visual-c++ cmake