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
在makeall之前在子目录上调用makeinstall 我正在研究一个C++项目的迁移,它的配置目前是CMASE(CMAKELIST.TXT)和MnGuMaMeX的组合,只使用CGUE。当前的设置方式是: myproject | CMakeLists.txt (add_subdirectory(src)) | src/ | apps/ | myapp/ | [myapp source files] | GNUmakefile | ... | libs/ | mylib/ | [mylib source files] | GNUmakefile | ... | common/ | CMakeLists.txt (add_subdirectory(dir1, dir2, dir3...)) | ... | include/_Cmake_Makefile - Fatal编程技术网

在makeall之前在子目录上调用makeinstall 我正在研究一个C++项目的迁移,它的配置目前是CMASE(CMAKELIST.TXT)和MnGuMaMeX的组合,只使用CGUE。当前的设置方式是: myproject | CMakeLists.txt (add_subdirectory(src)) | src/ | apps/ | myapp/ | [myapp source files] | GNUmakefile | ... | libs/ | mylib/ | [mylib source files] | GNUmakefile | ... | common/ | CMakeLists.txt (add_subdirectory(dir1, dir2, dir3...)) | ... | include/

在makeall之前在子目录上调用makeinstall 我正在研究一个C++项目的迁移,它的配置目前是CMASE(CMAKELIST.TXT)和MnGuMaMeX的组合,只使用CGUE。当前的设置方式是: myproject | CMakeLists.txt (add_subdirectory(src)) | src/ | apps/ | myapp/ | [myapp source files] | GNUmakefile | ... | libs/ | mylib/ | [mylib source files] | GNUmakefile | ... | common/ | CMakeLists.txt (add_subdirectory(dir1, dir2, dir3...)) | ... | include/,cmake,makefile,Cmake,Makefile,myapp和mylib之外还有更多的应用程序和lib,但它们都以类似的方式构建和链接,所以如果我有一个,我可以得到所有 按照项目目前的构建方式,有一个脚本基本上有4行: cmake path/to/myproject // with the necessary flags and variables passed make all DESTDIR=$INSTALL_DIR install cd src/libs ; make all cd src/apps ; make all 这是因为

myapp和mylib之外还有更多的应用程序和lib,但它们都以类似的方式构建和链接,所以如果我有一个,我可以得到所有

按照项目目前的构建方式,有一个脚本基本上有4行:

cmake path/to/myproject    // with the necessary flags and variables passed
make all DESTDIR=$INSTALL_DIR install
cd src/libs ; make all
cd src/apps ; make all
这是因为没有依赖项的
common
,首先构建和安装(
include
也在这里安装),然后是
libs
——它依赖于
common
——构建,然后是
apps
——它同时依赖于
libs
common
——构建

我的问题是,如果我替换
libs
apps
中的
GNUmakefile
s,我不知道如何更改我在构建脚本中运行的命令,使cmake和make像这样交织在一起:

  • cmake配置
    common
  • make编译并安装
    common
    中的所有cmake目标(假设它们是libcommon.so和libcommonutils.so)
  • cmake配置
    libs
  • make编译并安装
    libs
    中的所有cmake目标(它使用
    common
    中的库生成
    mylib.a
  • cmake配置
    apps
  • make从
    apps
    编译并安装所有cmake目标(使用
    mylib.a
    common
    共享库)
  • 安装
    include
    也必须在早期的某个时候进行,因为
    common
    取决于其中的头文件

    当然,另一种解决方案也可能有效,但这是我唯一能想到的解决方案。

    您可以将其用于
    常见的
    libs
    应用程序

    src/CMakeLists.txt

    ExternalProject_add(common
        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/common
        BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/common
        # Forward CMAKE_INSTALL_PREFIX to external project.
        CMAKE_CACHE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_INSTALL_PREFIX}
    )
    
    ExternalProject_add(libs
        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/libs
        BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/libs
        # Disable *install* step
        INSTALL_COMMAND ""
    )
    
    ExternalProject_add(apps
        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/apps
        BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR}/apps
        # Disable *install* step
        INSTALL_COMMAND ""
    )
    
    # Adjust dependencies between components
    add_dependencies(libs common)
    add_dependencies(apps libs common)
    
    使用此脚本(源代码外版本;也支持源代码内版本)

    cmake-DCMAKE\u安装\u前缀=
    制作
    
    与以下命令序列相等:

    mkdir src/common && cd src/common \
        && cmake -DCMAKE_INSTALL_PREFIX=<install-dir> <source-dir>/src/common && make install
    mkdir src/libs && cd src/libs && cmake <source-dir>/src/libs && make all
    mkdir src/apps && cd src/apps && cmake <source-dir>/src/apps && make all
    
    mkdir src/common&&cd src/common\
    &&cmake-DCMAKE\u INSTALL\u PREFIX=/src/common&&make INSTALL
    mkdir src/libs&&cd src/libs&&cmake/src/libs&&make all
    mkdir src/apps&&cd src/apps&&cmake/src/apps&&make all
    

    未执行包含的处理,但您可以用类似的方式执行。

    这与相关标记无关,或者,除非您能证明它们是相关标记,否则请删除它们,您将更快地获得更好的帮助。我不会删除它们,因为我可能丢失了一些东西。
    GNUMakefiles
    是否太广泛了?您是否尝试将它们的功能转换为
    CMakeLists.txt
    ?是否可以发布1。使用
    apps
    目录下的
    GNUMakefile
    生成了多少个“apps”。2.他们的代码是如何组织的。3.
    libs的情况也一样。为什么有人会否决这个问题?没有充分的理由。
    libs
    的配置实际上是否取决于正在配置/构建/安装的
    common
    ?如果没有,只需使用
    common
    ,并使
    libs
    中的所有目标依赖于该外部目标。这有效地保证了
    common
    将在构建
    libs
    之前安装。
    mkdir src/common && cd src/common \
        && cmake -DCMAKE_INSTALL_PREFIX=<install-dir> <source-dir>/src/common && make install
    mkdir src/libs && cd src/libs && cmake <source-dir>/src/libs && make all
    mkdir src/apps && cd src/apps && cmake <source-dir>/src/apps && make all