C++ C++;11用<;目标编译功能>;或<;设置(CMAKE\U CXX\U标准)>;
我正在使用一个Python库,名为,专门用于物理建模。 为了节省计算过程中的模拟,它实现了C++代码生成功能。它使用CMake生成特定模拟的可执行文件C++ C++;11用<;目标编译功能>;或<;设置(CMAKE\U CXX\U标准)>;,c++,c++11,cmake,C++,C++11,Cmake,我正在使用一个Python库,名为,专门用于物理建模。 为了节省计算过程中的模拟,它实现了C++代码生成功能。它使用CMake生成特定模拟的可执行文件 是在C++ 11中实现的。 问题 在CMAKLISTS.TXT文件中,C++ 11的特性由以下行激活: target_compile_features(<project_name> PUBLIC cxx_std_11) 在其他安装(Debian 8、Mac OSX或windows 7)上未遇到此错误 修复 我已经更改了CMakeL
是在C++ 11中实现的。
问题
target_compile_features(<project_name> PUBLIC cxx_std_11)
在其他安装(Debian 8、Mac OSX或windows 7)上未遇到此错误
修复
我已经更改了CMakeLists.txt模板。这里是到提交的链接,在我自己的fork上
我已经用set(CMAKE\u cxx\u标准11)
替换了target\u compile\u功能(PUBLIC cxx\u std\u 11)
问题 这两个命令之间有什么区别? 你对这件事有什么见解?我忘了提一些信息了吗
谢谢你的回答 您的
CMake
版本中没有cxx\u std\u 11
编译器元功能。它是在3.8
中引入的,因此这可以解释错误
两者的区别在于target\u compile\u features()
可以为特定目标请求特定功能。CMake将自动将适当的标准应用于指定的目标。另一方面,如果您设置了CMAKE\u CXX\u标准
,则请求的标准(如果CMAKE支持)将应用于整个项目(针对所有目标)
如上所述,您可以从CMake 3.8
开始使用target\u compile\u features()
请求一个完整的标准,在这种情况下,设置CMake\u CXX\u标准的唯一区别是该标准仅应用于指定的目标(如下所示)
请注意,如果使用PRIVATE
作用域调用target\u compile\u features
,则如果设置了PUBLIC
,则请求的特性/标准将仅应用于指定的目标,然后,请求的功能/标准也将应用于依赖于该目标的任何目标。请注意,您还有目标属性:,与
-- The CXX compiler identification is GNU 5.4.0
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMake Error at CMakeLists.txt:31 (target_compile_features):
target_compile_features specified unknown feature "cxx_std_11" for target
"dampedosc".
```
-- Configuring incomplete, errors occurred!
See also "/home/victorw/git/vocal-phs/python/output/dampedosc/CMakeFiles/CMakeOutput.log".