[gcc] CMake에 대한 새 GCC 경로를 지정하는 방법

내 OS는 centos이며 경로에 기본 gcc가 /usr/bin/gcc있습니다. 그러나 그것은 오래되었고 새로운 버전의 gcc가 필요합니다. 그래서 새 경로에 새 버전을 설치합니다 /usr/local/bin/gcc.

그러나 내가 실행할 때 cmake여전히 이전 버전의 gcc path ( /usr/bin/gcc) 사용합니다. gcc를 new path ( /usr/local/bin/gcc)에 어떻게 지정할 수 있습니까 ?

나는 덮어 시도 /usr/bin/gcc와 함께 /usr/local/bin/gcc,하지만 작동하지.



답변

덮어 쓰지 말고 cmake를 호출하기 전에 CMAKE_C_COMPILER내보내기 CC(및 CXX)합니다.

export CC=/usr/local/bin/gcc
export CXX=/usr/local/bin/g++
cmake /path/to/your/project
make

내보내기는 프로젝트를 처음 구성 할 때 한 번만 수행하면됩니다. 그러면 해당 값이 CMake 캐시에서 읽 힙니다.


업데이트 : 재정의하지 않는 이유에 대한 더 긴 설명CMAKE_C(XX)_COMPILER Jake의 의견 후에

CMAKE_C(XX)_COMPILER두 가지 주요 이유 때문에 값을 재정의 하지 않는 것이 좋습니다 . CMake의 캐시와 잘 작동하지 않고 컴파일러 검사 및 도구 감지를 중단하기 때문입니다.

set명령을 사용할 때 세 가지 옵션이 있습니다.

  • 캐시없이 일반 변수 생성
  • 캐시 사용, 캐시 된 변수 생성
  • 강제 캐시, 구성 할 때 항상 캐시 값 강제 적용

세 가지 가능한 호출에 대해 어떤 일이 발생하는지 살펴 보겠습니다 set.

캐시없이

set(CMAKE_C_COMPILER /usr/bin/clang)
set(CMAKE_CXX_COMPILER /usr/bin/clang++)

이렇게 CMAKE_C(XX)_COMPILER하면 동일한 이름의 캐시 변수를 숨기는 “일반”변수 를 만듭니다 . 즉, 이제 컴파일러가 빌드 스크립트에 하드 코딩되어 사용자 지정 값을 제공 할 수 없습니다. 컴파일러가 다른 여러 빌드 환경이있는 경우 문제가됩니다. 다른 컴파일러를 사용하고 싶을 때마다 스크립트를 업데이트 할 수 있지만 처음에는 CMake 사용의 가치가 제거됩니다.

좋아, 그럼 캐시를 업데이트하자 …

캐시 포함

set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "")
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "")

이 버전은 “작동하지 않습니다”. CMAKE_C(XX)_COMPILER당신이 그것을 강제하지 않는 한 변수는 캐시에 이미이 업데이트되지 것입니다.

아 .. 힘을 쓰자. 그럼 …

강제 캐시

set(CMAKE_C_COMPILER /usr/bin/clang CACHE PATH "" FORCE)
set(CMAKE_CXX_COMPILER /usr/bin/clang++ CACHE PATH "" FORCE)

이것은 “일반”변수 버전과 거의 동일하며, 유일한 차이점은 사용자가 볼 수 있도록 값이 캐시에 설정된다는 것입니다. 그러나 모든 변경 사항은 set명령에 의해 덮어 쓰여집니다 .

컴파일러 검사 및 도구 깨기

구성 프로세스 초기에 CMake는 컴파일러에서 검사를 수행합니다. 작동합니까? 실행 파일을 생성 할 수 있습니까? 등 또한, 관련 도구를 감지처럼 컴파일러를 사용 ar하고 ranlib. 스크립트에서 컴파일러 값을 재정의하면 “너무 늦었습니다”, 모든 검사 및 탐지가 이미 완료되었습니다.

예를 들어, gcc를 기본 컴파일러로 사용하는 내 컴퓨터에서 set명령을 사용할 때 /usr/bin/clang,ar 로 설정됩니다 /usr/bin/gcc-ar-7. CMake를 실행하기 전에 내보내기를 사용하면 /usr/lib/llvm-3.8/bin/llvm-ar.


답변

이 질문은 꽤 오래되었지만 여전히 Google 검색에 나타납니다. 받아 들여진 질문은 더 이상 저에게 효과가 없었고 나이가 들어간 것 같습니다. cmake에 대한 최신 정보는 cmake FAQ에 기록되어 있습니다. 있습니다.

컴파일러의 경로를 변경하는 방법에는 여러 가지가 있습니다. 한 가지 방법은

CMAKE_FOO_COMPILER사용하여 명령 줄 에서 적절한 변수를 유효한 컴파일러 이름 또는 전체 경로로 설정합니다 cmake -D. 예를 들면 :

cmake -G "Your Generator" -D CMAKE_C_COMPILER=gcc-4.2 -D CMAKE_CXX_COMPILER=g++-4.2 path/to/your/source

대신 이렇게 gcc-4.2쓸 수 있습니다path/to/your/compiler

 cmake -D CMAKE_C_COMPILER=/path/to/gcc/bin/gcc -D CMAKE_CXX_COMPILER=/path/to/gcc/bin/g++ .


답변

CMAKE_C_COMPILER새 경로로 설정 하십시오.

여기를 참조하십시오 : http://www.cmake.org/Wiki/CMake_Useful_Variables


답변

내보내기는 사용할 GCC / G ++ 버전을 구체적으로 지정해야합니다. 사용자가 여러 컴파일러 버전을 가지고 있으면 성공적으로 컴파일되지 않기 때문입니다.

 export CC=path_of_gcc/gcc-version
 export CXX=path_of_g++/g++-version
 cmake  path_of_project_contain_CMakeList.txt
 make 

프로젝트에서 C ++ 11을 사용하는 경우 -std=C++-11CMakeList.txt의 플래그를 사용하여 처리 할 수 ​​있습니다.


답변

대체 솔루션은 깨끗한 빌드 디렉토리에서 시작하여 cmake-gui를 통해 프로젝트를 구성하는 것입니다. 처음에 사용할 수있는 옵션 중 컴파일러에 대한 정확한 경로를 선택할 수있는 가능성이 있습니다.


답변

이는에서 작동 할 cmake뿐만 아니라 ./configure및 에서도 작동합니다 make.

./configure CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++

결과는 다음과 같습니다.

checking for gcc... /usr/local/bin/gcc
checking whether the C compiler works... yes


답변

CMAKE_<LANG>_COMPILER재구성을 트리거하지 않고 경로 변경

대체 컴파일러로 컴파일하고 싶었지만 다른 컴파일러를 설정하면 지워지는 명령 줄에서 -D 옵션도 전달했습니다. 이는 재구성을 트리거하기 때문에 발생합니다. 트릭은로 컴파일러 감지를 비활성화 NONE하고로 경로를 설정 FORCE한 다음로 설정하는 것 enable_language입니다.

project( sample_project NONE )

set( COMPILER_BIN /opt/compiler/bin )
set( CMAKE_C_COMPILER ${COMPILER_BIN}/clang CACHE PATH "clang" FORCE )
set( CMAKE_CXX_COMPILER ${COMPILER_BIN}/clang++ CACHE PATH "clang++" FORCE )

enable_language( C CXX )

도구 체인 파일 사용

더 현명한 선택은 도구 모음 파일을 만드는 것입니다.

set( CMAKE_SYSTEM_NAME Darwin )

set( COMPILER_BIN /opt/compiler/bin )
set( CMAKE_C_COMPILER ${COMPILER_BIN}/clang CACHE PATH "clang" )
set( CMAKE_CXX_COMPILER ${COMPILER_BIN}/clang++ CACHE PATH "clang++" )

그런 다음 추가 플래그를 사용하여 Cmake를 호출합니다.

cmake -D CMAKE_TOOLCHAIN_FILE=/path/to/toolchain_file.cmake ...