2012-03-03 5 views
18

CMake는 모든 C++ 소스 파일에 대해 하나 뿐인 CMAKE_CXX_COMPILER가 있어야한다는 견해에서 상당히 좋아 보인다. 목표별로이 방법을 재정의 할 방법을 찾을 수 없습니다. 이것은 내장 된 CMake 기능으로는 하나의 CMakeLists.txt에 호스트 -와 - 크로스 컴파일을 혼합하는 것을 매우 어렵게 만듭니다.동일한 언어로 여러 컴파일러에서 CMake 사용하기

내 질문은 : 동일한 언어 (예 : C++)에서 여러 컴파일러를 사용하는 가장 좋은 방법은 무엇입니까?

답변

12

CMake로는 불가능합니다.

CMake는 CMakeLists.txt 파일의 모든 대상이 공유하는 컴파일러 속성 집합 하나만 유지합니다. 두 개의 컴파일러를 사용하려면 CMake를 두 번 실행해야합니다. 예를 들어 동일한 컴파일러 툴체인에서 32 비트 및 64 비트 바이너리를 빌드합니다.

이 문제를 해결하는 가장 빠른 방법은 사용자 지정 명령을 사용하는 것입니다. 그러나 결국에는 기본적으로 영광스러운 셸 스크립트가 생겨 결국 원하는 것을 얻지 못할 것입니다.

깨끗한 해결책은 다음과 같습니다. 동일한 CMakeLists.txt에 넣지 마십시오! 어쨌든 다른 아키텍처를 연결할 수 없기 때문에 같은 파일에 둘 필요가 없습니다. CMake 스크립트의 일반적인 부분을 별도의 파일로 리팩토링하여 중복을 줄일 수 있으며 include()입니다.

여기서 가장 큰 단점은 단일 명령으로 빌드 할 수있는 능력이 없어지지만 다른 CMake-makefile을 호출하는 래퍼를 작성하여 좋아하는 스크립트 언어로 래퍼를 작성할 수 있다는 것입니다.

+2

add_directory (other_build_kind_folder)는 맞춤 래퍼를 만드는 것과 반대의 가능성이 있습니다. 그게 내가 한 일이기 때문에 작동하는 것 같습니다. :-) – cdleary

+2

@cdleary 어떻게 작동하는지 명확하게 설명해 주시겠습니까? 'add_subdirectory' (또는 실제로'add_directory'를 의미합니까?)는 툴 체인을 전환 할 수있게합니까? –

+1

와우, 이건 정말 정말 나쁜 디자인이야. –

0

는 @ 빌 호프만의 답변을 확장하려면 ExternalProject (독립 실행 형 cmake 구성/빌드/설치 환경)로서 종속성과 프로젝트 모두.

관련 문제