Подтвердить что ты не робот

Как заставить CMake использовать GCC вместо Clang в Mac OS X?

Я не могу найти информацию об этом, но только наоборот (например, как установить CMake для использования clang).

Я установил gcc-4.8 с помощью brew, настроил все зависимости, заголовки и т.д., и теперь CMake отказывается использовать gcc.

Я установил свой профиль bash как с псевдонимами, так и с фактическими данными:

export CC=/usr/bin/gcc
export CXX=/usr/bin/g++
alias gcc='gcc-4.8'
alias cc='gcc-4.8'
alias g++='g++-4.8'
alias c++='c++-4.8'

Но CMake упорно отказывается использовать GCC и вместо этого возвращается к лязг:

air:build alex$ cmake -DCMAKE_BUILD_TYPE=DEBUG ..
-- The C compiler identification is Clang 5.1.0
-- The CXX compiler identification is Clang 5.1.0
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
4b9b3361

Ответ 1

CMake (всегда) не слушает CC и CXX. Вместо этого используйте CMAKE_C_COMPILER и CMAKE_CXX_COMPILER:

cmake -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ ...

См. также документацию.

Кроме того, вы можете предоставить файл цепочки инструментов, но в этом случае это может быть излишним.

Ответ 2

Текущие версии CMake не соответствуют переменным окружения CC и CXX, как и следовало ожидать. В частности, если они являются абсолютными путями для двоичных файлов компилятора, они, похоже, игнорируются. В моей системе с недавно скомпилированным cmake 3.7.1 мне нужно сделать cmake -H. -Bbuild -DCMAKE_C_COMPILER=$CC -DCMAKE_CXX_COMPILER=$CXX.

Как утверждают другие, не стоит отличать выбор компилятора внутри вашего CMakeLists.txt, однако если это требуется для вашего случая использования здесь, как вы это делаете:

cmake_minimum_required(VERSION 3.5) # Or whatever version you use

# THIS HAS TO COME BEFORE THE PROJECT LINE
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_COMPILER "g++")
# THIS HAS TO COME BEFORE THE PROJECT LINE

project(my_project VERSION 0.0.0 LANGUAGES C CXX)

В этом случае cmake не будет работать, если указанный компилятор не найден. Обратите внимание, что вы должны установить эти переменные перед строкой проекта, так как эта команда находит и настраивает компиляторы.

Ответ 3

Просто добавьте, что есть также переменная CMake "CMAKE_Fortran_COMPILER", чтобы забрать GNU Fortran, а не clang fortran. Но он, кажется, отсутствует в документации

cmake -DCMAKE_Fortran_COMPILER =/usr/.../bin/gfortran-6.x.0