2012-10-07 2 views
3

나는 우리가 코드를 마이 그 레이션 할 생각을하고있는 순간 CMake를 배우고있다. 우리가 현재 만들고있는 시스템으로 많은 일을하는 한 가지는 공통 코드 파일을 "서브 프로젝트"하는 것입니다. 예를 들어, 우리는 우리가 만드는 모든 프로젝트에 포함되는 많은 공유 된 일반 헤더 (일부 c/cpp 파일 포함)를 가지고 있습니다. 내가 CMake에서 이것을 복제하고 싶지만 쉽게 할 수있는 방법이 없다. 정확히 말하면, 내가 좋아하는 뭔가를하고 싶지 :CMake : 파일을 "subprojecting"하는 가장 좋은 방법

부모 CMakeLists.txt을

#Somehow have a list of files here that get added to the parent project 

지금까지 내가 찾은

add_subdirectory(shared_folder shared_build_folder) 

#Next line should somehow add in the files reference in the shared_folder 
add_executable([specific files for this project] build_folder) 

아이 CMakeLists.txt (shared_folder) 이것을하는 다양한 "방법",하지만 모두 조금 해킹 보입니다. 나는 이것이 실제로 내가해야 할 일이고 CMake가이 발전 스타일을 향한 것이 아니라는 결론에 도달 할 것입니다. 명확성을 위해, 대부분의 솔루션은 파일 목록으로 구성된 상위 수준에서 변수를 만드는 것과 같은 작업을 수행합니다. 이 변수 (어떤 헛소리를 통해)는 어떤 자식들과 "통과"할 수 있으며, 채워진 후 add_exectuable을 호출하면 그 변수를 사용하여 파일을 추가합니다.

내 모든 솔루션에는 꽤 많은 매크로/기능이 포함되어 있으며 약간의 오버 헤드가 있습니다. 이것은 다른 사람들이 시도한 것입니까? 이것을하기위한 최선의 접근법에 대한 단서가 있습니까?

감사 앤드류

우리는 똑같은 문제에 직면하고 우리가 CMake 방향을 받아들이고 그것이 우리의 구조의 일부를 변경하는 것을 의미하는 경우에도 더 나은 구조화 된 프로젝트의 결과 우는 시간 후 한

답변

1

.

서브 디렉토리를 사용하는 경우 add_subdirectory 구문이 처리되면 타겟이 자동으로 전체 프로젝트 (이후의 다른 add_subdirectory 호출에서도)로 내보내집니다. 공통 코드를 포함하는 서브 프로젝트가 라이브러리를 생성합니다. 또한 우리가 include와 주요 CMakeLists.txt에 .cmake-파일을 포함하여 FindPackage-메커니즘을 시뮬레이션 "다른"것들에 대한 부모 CMakeLists.txt

를 변수를 내보내는 데 사용할 수있는 PARENT_SCOPE있다

. 그렇게함으로써 우리는 변수를 쉽게 제공하고 include_directories을 변경하고 프로젝트에 대한 다른 멋진 것들을 할 수 있습니다.

cmake-variable 사이에는 종속성이 없으므로 cmake를 사용하여 소스 (프로젝트 기능)를 구성하는 대신 build (컴파일러, 포함, 라이브러리 ...) 만 구성합니다. 이 분할은 빌드 시스템 리팩토링의 핵심 요소였습니다.

관련 문제