2015-01-07 2 views
4

Ubuntu, C++cmake을 사용하여 다른 프로그램의 코드 인 Beta을 기반으로 프로그램 Alpha을 만들고 싶습니다. 난 이미 Beta에 대한 소스 코드가 있고,이 기존 코드를 사용하는 Alpha에 대한 코드를 작성해야합니다. 나는 모든 것을 깔끔하게 유지하려고 노력하고 있으므로 AlphaBeta 소스 파일, Alpha.cppBeta.cpp에 대한 별도의 디렉토리가 있습니다.다른 CMakeLists.txt에서 cmake로 변수 읽기

가 여기 내 디렉토리 구조입니다 :

/CMakeLists.txt 
/Alpha.cpp (the main function) 
/Beta 
    /CMakeLists.txt 
    /Beta.cpp 

Alpha에 대한 나의 CMakeLists.txt 파일은 다음과 같습니다 : 이제

cmake_minimum_required(VERSION 2.8) 
project(Alpha) 
add_executable(Alpha Alpha.cpp Beta/Beta.cpp) 

, 원래의 코드에 Beta를 들어, CMakeLists.txt 파일 정보를 많이 가지고, 운영체제 검사, 패키지 찾기, 그리고 일반적으로 다양한 cmake 변수 정의 등. Alpha에 대해 CMakeLists.txt 파일의 변수를 사용해야하므로 Beta.cpp이 제대로 컴파일됩니다.

그럼 내 질문 :이 정보를 모두 AlphaCMakeLists.txt 파일에 모두 쓸 필요없이 Beta/CmakeLists.txt에 모두 유지할 수 있습니까? 그런 다음 AlphaCMakeLists.txt 파일에이 변수를 가져 오려면 BetaCMakeLists.txt 파일을 읽으려면 어떻게해야합니까? 모든 것을 깔끔하게 유지하고 모듈성을 유지하려면이 작업을 수행하고 싶습니다. 감사!

답변

7

CMake는 다른 파일/모듈을 가져올 수있는 include 구조를 가지고 있습니다. http://www.cmake.org/cmake/help/v3.0/command/include.html

그래서 당신은 include (Beta/Beta.cmake)과 알파의 CMakeLists에서 당신이 Beta.cmake라는 다른 파일/모듈에 베타/CMakeLists.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) 

는 또한 How to include an additional CMakeLists.txt

+0

감사를 참조

/CMakeLists.txt /Alpha.cpp (the main function) /Beta /CMakeLists.txt /Beta.cmake (variables required in Alpha's CMake) /Beta.cpp 

을 수 그리고 알파의 CMakeList.txt 것이다. 귀하의 예제에서'Beta/CMakeLists.txt'는 모든 변수가'Beta/Beta.cmake'에 있다면 왜 여전히 필요합니까? – Karnivaurus

+0

또한 Alpha의 CMakeList.txt의 세 번째 줄은'include (Beta/Beta.cmake)'가 아니겠습니까? – Karnivaurus

+0

'Beta/CMakeLists.txt'를 모두 포함하길 원하는지 여부는 Alpha의 CMakeLists.txt에 필요한 정보의 양에 달려 있습니다. 아이디어는 두 가지 모두에서 필요한 공통 항목을 추출하고 별도의 파일에 넣고 포함시키는 것입니다. –