tjw*_*992 1 c++ cmake shared-libraries
我正在设计可以在我的其他C ++项目中链接的库的集合。为了使该集合易于使用,我希望能够链接到各个库,或者链接到包含所有其他库的一个主库。如何在CMakeLists.txt
文件中指定?
例如:
add_library(library1 SHARED
file1.cpp
file2.cpp
)
add_library(library2 SHARED
file3.cpp
file4.cpp
)
# Define a master library that contains both of the others
add_library(master_library SHARED
library1
library2
)
Run Code Online (Sandbox Code Playgroud)
是否有使用CMake获得此功能的正确方法?
这个问题不是重复的:CMake:是否可以仅从静态库而不从源构建可执行文件?
这仅与共享库有关,与静态库或可执行文件无关。
此解决方案似乎有效。
add_library(library1 SHARED
file1.cpp
file2.cpp
)
add_library(library2 SHARED
file3.cpp
file4.cpp
)
# dummy file is required to avoid a cmake error, but this
# "dummy" file serves no other purpose and is empty.
add_library(master_library SHARED
dummy.cpp
)
# Link the master library with the other libraries
target_link_libraries(master_library
library1
library2
)
Run Code Online (Sandbox Code Playgroud)
完成此操作后,我只能使用主库来编译和链接代码。
如果您想要的只是一个方便其他人使用的目标,并且不关心您是否有一个或多个库,那么 cmake 可以使用接口库来做到这一点:
add_library(library1 SHARED
file1.cpp
file2.cpp
)
add_library(library2 SHARED
file3.cpp
file4.cpp
)
add_library(master_library INTERFACE)
# Link the master library with the other libraries
target_link_libraries(master_library INTERFACE
library1
library2
)
Run Code Online (Sandbox Code Playgroud)
然后在另一个位置(如果有)
target_link_libraries(my_executable PRIVATE
master_library
)
Run Code Online (Sandbox Code Playgroud)
my_executable
将链接到library1
和library2