CMake:替换INTERFACE目标

时间:2017-07-07 18:54:20

标签: c++ cmake c++17

我需要用/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

如何去做?

1 个答案:

答案 0 :(得分:3)

对于接口库,您需要更改INTERFACE_COMPILE_DEFINITIONS而不是COMPILE_DEFINITIONS(请参阅add_library(INTERFACE))。

以下是我使用VS2017测试的完整示例(使用interpolate,因为尚未支持/std:c++latest可能会被CMake忽略/删除):

/std:c++17