Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Makefile 从另一个cmake文件在cmake中运行make install命令_Makefile_Cmake_Add_Subdirectory_Make Install - Fatal编程技术网

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

Makefile 从另一个cmake文件在cmake中运行make install命令,makefile,cmake,add,subdirectory,make-install,Makefile,Cmake,Add,Subdirectory,Make Install,我们在不同的文件夹中有多个库,主应用程序需要在其他文件夹中构建这些库并将它们安装到输出文件夹,然后主应用程序需要链接到库以构建可执行文件 我可以在循环中使用add_subdirectory()构建其他文件夹中的库,但无法通过主cmake文件将它们安装到输出文件夹。谁能帮我一下吗 主应用程序需要在其他文件夹中构建这些库并将它们安装到输出文件夹,然后主应用程序需要链接到库以构建可执行文件 在CMake中,没有必要安装库来链接到它们。您可以构建库,并在不安装库的情况下将主可执行文件链接到它们。当您需要

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

我可以在循环中使用add_subdirectory()构建其他文件夹中的库,但无法通过主cmake文件将它们安装到输出文件夹。谁能帮我一下吗

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

在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)
project(MyLib)

set(SOURCES <...>) # specify library's sources
add_library(${PROJECT_NAME} ${SOURCES})

set(MyLib ${PROJECT_NAME} CACHE INTERNAL "")
project(MyApp)

set(SOURCES <...>) # specify app's sources
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} ${MyLib})
lib子项目的CMakeLists.txt可以如下所示:

project(MyProject)

add_subdirectory(lib)
add_subdirectory(app)
project(MyLib)

set(SOURCES <...>) # specify library's sources
add_library(${PROJECT_NAME} ${SOURCES})

set(MyLib ${PROJECT_NAME} CACHE INTERNAL "")
project(MyApp)

set(SOURCES <...>) # specify app's sources
add_executable(${PROJECT_NAME} ${SOURCES})
target_link_libraries(${PROJECT_NAME} ${MyLib})

我在这里没有介绍安装,但实际上很简单:如果您的库是静态库,那么只需要使用安装程序来安装可执行文件。如果您的库是共享库,您需要将它们与可执行文件一起安装。

请发布一些您已经尝试过的代码。