我正在将我的库拆分为仅 header 的库和已编译的库,因此,我第一次尝试使用CMake来“构建”或公开仅 header 的库图书馆。
阅读this和CMake文档,我了解我需要使用没有源的INTERFACE库。但是-我的 header 必须使用至少C++ 11的C++语言标准版本进行编译。当我实际上在编译某些东西时,我做了以下工作:
set_property(TARGET foo PROPERTY CXX_STANDARD 11)
set_property(TARGET foo PROPERTY CXX_STANDARD_REQUIRED ON)
set_property(TARGET foo PROPERTY CXX_EXTENSIONS OFF)
但这是:我注意到没有
set_property(... INTERFACE)
。那么我该如何支持强制依赖代码使用C++ 11或更高版本?编辑:我既对约束依赖项中确切的C++版本选择的回答感兴趣,又对约束“至少”(如果后者有问题/困难/不可能)的回答都感兴趣。
最佳答案
如果您的cmake版本比较新,可以尝试
target_compile_features(foo INTERFACE cxx_std_11)
这样可以确保每个使用foo的库,即target_link_libraries(bar PRIVATE foo)
将使用C++ 11进行编译。例如,如果bar使用源文件bar.cpp,则cmake将使用std = c++ 11编译bar.cpp。
关于c++ - 如何强制INTERFACE库上的依赖项使用C++ 11或更高版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62634268/