我需要用/std:c++14
替换INTERFACE
目标(仅限标题库)的/std:c++17
标记。 CMake不支持直接在VS中设置C ++ 17标志(参见How to enable /std:c++17 in VS2017 with CMake)所以我需要手动替换它。
但是get_target_property(my_compile_flags mylib COMPILE_OPTIONS)
检索当前设置的标志列表然后用/ std:c ++ 17替换/ std:c ++ 14不起作用:
INTERFACE_LIBRARY目标可能只有白名单属性。不允许使用“COMPILE_OPTIONS”属性。
您可以通过target_compile_features(...)
设置它们,然后通过例如target_compile_options(mylib INTERFACE /std:c++17)
。但后一个命令添加标志,而不删除/std:c++14
。
如何去做?
答案 0 :(得分:3)
对于接口库,您需要更改INTERFACE_COMPILE_DEFINITIONS
而不是COMPILE_DEFINITIONS
(请参阅add_library(INTERFACE)
)。
以下是我使用VS2017测试的完整示例(使用interpolate
,因为尚未支持/std:c++latest
可能会被CMake忽略/删除):
/std:c++17