提问人:user93114 提问时间:8/4/2022 更新时间:8/5/2022 访问量:441
CMake:为仅标头库添加编译标志
CMake: add compile flag for header only library
问:
不确定如何在此处正确使用 CMake。我有一个库,它是一个使用 C++ 功能的仅模板头库。因此,我想确保我的库的任何 [下游/消费者/依赖] 都使用正确的标志编译我的库的专用化。
第一个 lib 执行以下操作:
add_library(foo INTERFACE include/foo.h)
现在,使用 c++20 中的文件系统内容,所以我想做这样的事情:foo
target_compile_features(foo INTERFACE cxx_std_20)
target_link_libraries(foo INTERFACE stdc++fs)
在我的家属中,我想做
add_executable(bar src/bar.cpp)
find_package(foo REQUIRED)
target_link_libraries(bar foo)
// src/bar.cpp
#include "foo.h" // or something like that
目前,链接器失败。设置它的正确方法是什么?
答:
1赞
Some programmer dude
8/4/2022
#1
target_link_libraries
用于设置在实际构建指定目标时要链接的库。这里的问题是没有构建库。INTERFACE
您需要将要链接的库添加为库的依赖项。
这是通过 set_target_properties
命令来设置 INTERFACE_LINK_LIBRARIES
属性来完成的:
set_target_properties(foo
PROPERTIES INTERFACE_LINK_LIBRARIES stdc++fs)
评论
0赞
user93114
8/4/2022
谢谢。我也可以向此接口添加 C++20 标志吗?还是多余?
1赞
Some programmer dude
8/4/2022
我认为,@user93114应该按照你的意图工作。它应设置 INTERFACE_COMPILE_FEATURES
属性。target_compile_features
0赞
Some programmer dude
8/4/2022
@user93114 要进行检查,您可以执行一个详细的构建,其中命令与所有标志和选项一起显示。
评论
target_include_directories