在CMake中,我们可以add_library(mylib file1.cpp file2.cpp)
并在库路径中建立mylib.a
。我们也可以target_include_directories(mylib INTERFACE some/directory)
,它会根据mylib
影响目标。
但是如果我有一个库开始怎么办,我将不对其进行编译。如何添加与此相关的目标?我添加为依赖项后,将导致.a
文件被链接到,并且我可以为其设置target_include_directories()
?
注意:我问的是CMake 3.x。
答案 0 :(得分:1)
CMake为已编译的库提供备用签名:
add_library(
mynamespace::mylib
STATIC # or it could be SHARED
IMPORTED
)
有关更多详细信息,请参见official CMake documentation。
这样您就可以向目标添加属性
set_target_properties(
mynamespace::mylib
PROPERTIES
IMPORTED_LOCATION "path/to/libmylib.a"
)
此处精度不高,如果您使用的是Windows DLL,则必须在IMPORTED_LOCATION
中传递DLL文件的路径,并设置另一个指向IMPORTED_IMPLIB
文件的属性.lib
,(不太方便)。
请注意,每个配置(调试和发布)还具有等效的属性,需要设置另一个属性(IMPORTED_CONFIGURATION
),例如IMPORTED_LOCATION_DEBUG
。
为避免丢失包含文件,您还可以使用INTERFACE_INCLUDE_DIRECTORY
属性来精简包含目录
set_target_properties(
mynamespace::mylib
PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "path/to/mylib/include"
)
这样,在使用target_link_libraries()
进行链接声明时,CMake将读取导入目标的信息并隐式添加包含目录。
官方文档reference。