Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/130.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

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
C++ Cmake建设两个项目_C++_Cmake_C++17 - Fatal编程技术网

C++ Cmake建设两个项目

C++ Cmake建设两个项目,c++,cmake,c++17,C++,Cmake,C++17,我想使用cmake(使用该库的库和沙盒应用程序)构建两个项目 我当前有以下文件夹结构: -- yanthra_engine | -- CMakeLists.txt -- lib -- ... -- sandbox | -- CMakeLists.txt -- out -- ... yantra_引擎构建了一个库,其中as sandbox构建了一个可执行文件(使用上述库)。 我应该为这两个项目保留完整的CMakeLists文件吗?是否有任何有效的文件夹结构可以遵循 我

我想使用cmake(使用该库的库和沙盒应用程序)构建两个项目

我当前有以下文件夹结构:

-- yanthra_engine
 |
  -- CMakeLists.txt
  -- lib
  -- ...
-- sandbox
 |
  -- CMakeLists.txt
  -- out
  -- ...
yantra_引擎构建了一个库,其中as sandbox构建了一个可执行文件(使用上述库)。 我应该为这两个项目保留完整的CMakeLists文件吗?是否有任何有效的文件夹结构可以遵循


我希望在构建我的沙盒应用程序时自动构建库,但反之亦然。

您可以尝试的一件事是将
yanthra
作为
sandbox
的子目录。然后您可以在沙箱中执行此操作:


add_子目录(yanthra_引擎)

您可以尝试的一件事是让
yanthra
成为
sandbox
的子目录。然后您可以在沙箱中执行此操作:


add_子目录(yanthra_引擎)

您应该将
CMakeLists.txt
文件分开保存。对于每个不相关的目标,最好使用一个
CMakeLists.txt
文件。(在不属于同一个库的不同构建的意义上是不相关的,例如,一个共享一个静态库。)

是否将两个目标添加到同一个项目基本上取决于您。如果库设置正确,您可以为库创建一个单独的项目,并使用它的安装目标在您的计算机上安装库,包括cmake配置文件,以便将已安装的库作为目标导入到沙盒项目中。这要求您向库中添加相应的
install
命令

如果您希望能够通过相同的构建文件构建库和沙盒,那么基本上您需要做的就是确保可以从
CMakeLists.txt
文件访问这两个
CMakeLists.txt
文件

如果没有任何文件的位置,您可以

  • 在父文件夹中创建一个
    CMakeLists.txt
    文件,添加两个子目录
  • 您还可以从
    sandbox/CMakeLists.txt
  • 这两种方法都允许您单独为lib设置一个构建项目,或者同时为两者设置一个构建项目。在方法1中,用于构建两者的源目录将是
    Yantra_engine
    sandbox
    的父目录,而在方法2中,它将是
    sandbox


    对于这两种方法,只要指定要构建的目标,就不必担心不必要地构建沙箱项目。由于沙盒链接库,但不必建立依赖项,因此构建沙盒的另一种方法是确保库是最新的,但构建库只构建库及其依赖项,而不包括沙盒。

    您应该将
    CMakeLists.txt
    文件分开。对于每个不相关的目标,最好使用一个
    CMakeLists.txt
    文件。(在不属于同一个库的不同构建的意义上是不相关的,例如,一个共享一个静态库。)

    是否将两个目标添加到同一个项目基本上取决于您。如果库设置正确,您可以为库创建一个单独的项目,并使用它的安装目标在您的计算机上安装库,包括cmake配置文件,以便将已安装的库作为目标导入到沙盒项目中。这要求您向库中添加相应的
    install
    命令

    如果您希望能够通过相同的构建文件构建库和沙盒,那么基本上您需要做的就是确保可以从
    CMakeLists.txt
    文件访问这两个
    CMakeLists.txt
    文件

    如果没有任何文件的位置,您可以

  • 在父文件夹中创建一个
    CMakeLists.txt
    文件,添加两个子目录
  • 您还可以从
    sandbox/CMakeLists.txt
  • 这两种方法都允许您单独为lib设置一个构建项目,或者同时为两者设置一个构建项目。在方法1中,用于构建两者的源目录将是
    Yantra_engine
    sandbox
    的父目录,而在方法2中,它将是
    sandbox


    对于这两种方法,只要指定要构建的目标,就不必担心不必要地构建沙箱项目。由于sandbox链接库,但不必建立依赖关系,因此构建sandbox可确保库是最新的,但是构建库只会构建库及其依赖项,而不包括沙盒。

    感谢您简洁的描述性回答。感谢您简洁的描述性回答。我一定会尝试。谢谢您的回复。我一定会尝试。谢谢您的回复。
    cmake_minimum_required(VERSION 3.0)
    
    project(CommonProject)
    
    add_subdirectory(yanthra_engine)
    add_subdirectory(sandbox EXCLUDE_FROM_ALL) # targets in sandbox not built by default.
    
    ...
    add_subdirectory(../yanthra_engine "${CMAKE_BINARY_DIR}/yanthra_engine_build")
    ...