CMake에 대한 새 GCC 경로를 지정하는 방법
내 OS는 경로에 기본 gcc가있는 centos입니다 /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
In case project use C++11 this can be handled by using -std=C++-11
flag in CMakeList.txt
An alternative solution is to configure your project through cmake-gui, starting from a clean build directory. Among the options you have available at the beginning, there's the possibility to choose the exact path to the compilers
참고URL : https://stackoverflow.com/questions/17275348/how-to-specify-new-gcc-path-for-cmake
'programing tip' 카테고리의 다른 글
PostgreSQL에서 초 단위의 타임 스탬프 차이 찾기 (0) | 2020.08.25 |
---|---|
클래스에서 const 멤버 변수를 초기화하는 방법은 무엇입니까? (0) | 2020.08.25 |
배치 파일을 사용하여 현재 작업 디렉토리를 변경하는 방법 (0) | 2020.08.25 |
SQL Developer에서 변수 값 인쇄 (0) | 2020.08.25 |
CasperJS에서 'Then'은 실제로 무엇을 의미합니까? (0) | 2020.08.24 |