Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ CMake:替换接口目标的编译标志_C++_Cmake_C++17 - Fatal编程技术网

C++ CMake:替换接口目标的编译标志

C++ CMake:替换接口目标的编译标志,c++,cmake,c++17,C++,Cmake,C++17,我需要用/std:c++17替换仅用于接口目标头的库的/std:c++14标志。CMake不支持直接在VS中设置C++17标志,因此我需要手动替换它 但是,get_target_property my_compile_flags mylib compile_选项检索当前设置的标志列表,然后用/std:c++17替换/std:c++14不起作用: 接口库目标只能具有白名单属性。不允许使用属性COMPILE\u选项 但是,您可以通过目标编译功能设置它们。。。并通过例如target_compile_o

我需要用/std:c++17替换仅用于接口目标头的库的/std:c++14标志。CMake不支持直接在VS中设置C++17标志,因此我需要手动替换它

但是,get_target_property my_compile_flags mylib compile_选项检索当前设置的标志列表,然后用/std:c++17替换/std:c++14不起作用:

接口库目标只能具有白名单属性。不允许使用属性COMPILE\u选项

但是,您可以通过目标编译功能设置它们。。。并通过例如target_compile_options mylib INTERFACE/std:c++17手动执行。但是后一个命令添加了标志,而没有删除/std:c++14


如何做到这一点?

对于接口库,您需要更改而不是查看

以下是我使用VS2017测试的完整示例,使用了/std:c++最新版本,因为尚未支持/std:c++17,CMake可能会忽略/删除它:

cmake_最低要求版本3.8 项目接口libcppstd includeCheckxxCompilerFlag fileWRITE mylib/Definitions.h[=[ 定义HELLO_文本HELLO接口库 ]=] 添加库mylib接口 目标目录mylib接口mylib 目标编译选项mylib接口/std:c++14 fileWRITE main.cpp[=[ 包括定义 包括 int main {
std::cout对于接口库,您需要更改而不是查看

以下是我使用VS2017测试的完整示例,使用了/std:c++最新版本,因为尚未支持/std:c++17,CMake可能会忽略/删除它:

cmake_最低要求版本3.8 项目接口libcppstd includeCheckxxCompilerFlag fileWRITE mylib/Definitions.h[=[ 定义HELLO_文本HELLO接口库 ]=] 添加库mylib接口 目标目录mylib接口mylib 目标编译选项mylib接口/std:c++14 fileWRITE main.cpp[=[ 包括定义 包括 int main {
std::cout@Ela782谢谢:-不客气。如果您能在回答时帮助我们/我-如果您能在将来的问题中添加一个作为测试用例,那将非常好。@Ela782谢谢:-不客气。如果您能在回答时帮助我们/我-如果您能在将来的问题中添加一个作为测试用例,那将非常好。