主应用程序需要在其他文件夹中构建这些库并将它们安装到输出文件夹,然后主应用程序需要链接到库以构建可执行文件。
在 CMake 中无需安装库即可链接到它们。您可以构建库并在不安装库的情况下将主可执行文件链接到它们。当您需要将应用程序作为一个整体安装时,您可以根据需要安装库以及可执行文件,即如果库是共享库而不是静态库。
如何组织事物的一个示例:假设您的项目中具有以下结构:
CMakeLists.txt # root of project
|
|--lib
| |--CMakeLists.txt # library subproject
|
|--app
|--CMakeLists.txt # app subproject
那么你的根CMakeLists.txt 可以如下所示:
project(MyProject)
add_subdirectory(lib)
add_subdirectory(app)
lib 子项目的 CMakeLists.txt 可能如下所示:
project(MyLib)
set(SOURCES <...>) # specify library's sources
add_library(${PROJECT_NAME} ${SOURCES})
set(MyLib ${PROJECT_NAME} CACHE INTERNAL "")
上面 sn-p 中的最后一行旨在使 MyLib 变量在项目中的任何地方都可用。我发现了这个技巧here 并在我的项目中成功使用了它。也许这里有更好的选择,如果有人知道,请随时提出建议。
应用程序的CMakeLists.txt 可能如下所示:
project(MyApp)
set(SOURCES <...>) # specify app's sources
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} ${MyLib})
我没有在这里介绍安装,但它实际上很简单:如果您的库是静态库,您只需要使用install TARGETS 安装可执行文件。如果您的库是共享库,则需要将它们与可执行文件一起安装。