如何为_existing_库创建目标?

时间:2018-11-11 21:51:17

标签: cmake

在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。

1 个答案:

答案 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

另请参阅文档中的herehere

为避免丢失包含文件,您还可以使用INTERFACE_INCLUDE_DIRECTORY属性来精简包含目录

set_target_properties(
    mynamespace::mylib 
    PROPERTIES
    INTERFACE_INCLUDE_DIRECTORIES "path/to/mylib/include"
)

这样,在使用target_link_libraries()进行链接声明时,CMake将读取导入目标的信息并隐式添加包含目录。

官方文档reference

相关问题