从另一个cmake文件在cmake中运行make install命令

问题描述 投票:0回答:1

我们在不同的文件夹中有多个库,主应用程序需要在其他文件夹中构建这些库,并将它们安装到输出文件夹,然后主应用程序需要链接至库以构建可执行文件。

我能够使用add_subdirectory()循环构建其他文件夹中存在的库,但是我无法通过主cmake文件将它们安装到输出文件夹中。谁能帮我这个忙。

makefile cmake add subdirectory make-install
1个回答
0
投票

主应用程序需要在其他文件夹中构建这些库,并将它们安装到输出文件夹,然后主应用程序需要链接至库以构建可执行文件。

在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 "")

上面代码段的最后一行旨在使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安装可执行文件。如果您的库是共享库,则需要将它们与可执行文件一起安装。

© www.soinside.com 2019 - 2024. All rights reserved.