C++ Cmake建设两个项目
我想使用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文件吗?是否有任何有效的文件夹结构可以遵循 我
-- 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
Yantra_engine
和sandbox
的父目录,而在方法2中,它将是sandbox
对于这两种方法,只要指定要构建的目标,就不必担心不必要地构建沙箱项目。由于沙盒链接库,但不必建立依赖项,因此构建沙盒的另一种方法是确保库是最新的,但构建库只构建库及其依赖项,而不包括沙盒。您应该将
CMakeLists.txt
文件分开。对于每个不相关的目标,最好使用一个CMakeLists.txt
文件。(在不属于同一个库的不同构建的意义上是不相关的,例如,一个共享一个静态库。)
是否将两个目标添加到同一个项目基本上取决于您。如果库设置正确,您可以为库创建一个单独的项目,并使用它的安装目标在您的计算机上安装库,包括cmake配置文件,以便将已安装的库作为目标导入到沙盒项目中。这要求您向库中添加相应的install
命令
如果您希望能够通过相同的构建文件构建库和沙盒,那么基本上您需要做的就是确保可以从CMakeLists.txt
文件访问这两个CMakeLists.txt
文件
如果没有任何文件的位置,您可以
CMakeLists.txt
文件,添加两个子目录sandbox/CMakeLists.txt
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")
...