使用Ubuntu
,C++
和cmake
,我想创建一个基于另一个程序Alpha
的代码的程序Beta
。我已经拥有Beta
的源代码,我需要编写使用此现有代码的Alpha
代码。我试图保持一切都很整洁,因此我为Alpha
和Beta
源文件Alpha.cpp
和Beta.cpp
设置了单独的目录。
这是我的目录结构:
/CMakeLists.txt
/Alpha.cpp (the main function)
/Beta
/CMakeLists.txt
/Beta.cpp
我CMakeLists.txt
的{{1}}文件如下所示:
Alpha
现在,在cmake_minimum_required(VERSION 2.8)
project(Alpha)
add_executable(Alpha Alpha.cpp Beta/Beta.cpp)
的原始代码中,Beta
文件包含大量信息,例如检查操作系统,查找包以及通常定义各种cmake变量。我需要在CMakeLists.txt
CMakeLists.txt
文件中使用这些变量,以便正确编译Alpha
。
所以,我的问题是:是否可以在Beta.cpp
中保留所有这些信息,而无需在Beta/CmakeLists.txt
的{{1}}文件中全部写出来?然后,我如何告诉Alpha
的{{1}}文件读取CMakeLists.txt
的{{1}}文件以获取这些变量?我想这样做是为了保持一切整洁,并保持模块化。谢谢!
答案 0 :(得分:8)
CMake有一个include
结构,允许你引入其他文件/模块。
http://www.cmake.org/cmake/help/v3.0/command/include.html
因此,您可以将Beta / CMakeLists.txt所需的任何内容分离到另一个名为Beta.cmake的文件/模块中,并将其包含在Alpha的CMakeLists中include (Beta/Beta.cmake)
。
所以你的目录结构是
/CMakeLists.txt
/Alpha.cpp (the main function)
/Beta
/CMakeLists.txt
/Beta.cmake (variables required in Alpha's CMake)
/Beta.cpp
Alpha的CMakeList.txt
cmake_minimum_required(VERSION 2.8)
project(Alpha)
include(Beta/Beta.cmake) (get variables needed from Beta)
add_executable(Alpha Alpha.cpp Beta/Beta.cpp)