我试图在cmake中创建一个自定义目标,其中:
target_compile_options(... PUBLIC ...)target_include_directories(... PUBLIC ...)通过这种方式,消费者可以链接到我的新目标,并拥有必需的包含目录和编译选项集。
在boost-build中,您可以使用特性“包装”或“别名”预构建的库,并添加额外的“使用要求”(编译器标志等),这将添加到使用库的所有目标中。
lib foo
:
: <file>vendor/library.a
:
: <include>vendor
;vendor/library.a命名为一个新的库foo。foo时,它还将更新其包含路径。foo的代码将能够#include "foo.h",并且文件将被找到,因为vendor已经添加到包含路径中。我正在寻找一种在CMake中做同样事情的方法。
我目前的做法是这样的:
find_library(LIB_FOO library.a PATHS ${CMAKE_SOURCE_DIR}/path/to/vendor NO_DEFAULT_PATH)
target_link_library (my_target ${LIB_FOO})
target_include_directories(my_target PRIVATE "${CMAKE_SOURCE_DIR}/path/to/vendor")但是,如果有几个目标需要使用foo,那么这3个调用就会被每个调用重复,这就变得相当繁重。
对于foo的消费者来说,拥有其他目标要容易得多。
target_link_libraries (foo ${CMAKE_CURRENT_LIST_DIR}/vendor/library.a)
target_compile_options (foo PUBLIC ...)
target_include_directories(foo PUBLIC ...)问题:
编辑回复评论:
我尝试创建一个IMPORTED库(如这里所描述的):
add_library(foo STATIC IMPORTED)
set_property(TARGET foo PROPERTY IMPORTED_LOCATION ${CMAKE_CURRENT_LIST_DIR}/vendor/library.a)但是,当我尝试设置包含目录时,我会得到一个错误:
target_include_directories(foo SYSTEM PUBLIC "${CMAKE_CURRENT_LIST_DIR}/vendor")错误:
供应商/CMakeLists.txt:39 (target_include_directories):无法指定导入目标"foo“的包含目录时发生的CMake错误。
https://stackoverflow.com/questions/36799017
复制相似问题