2015-02-24 4 views
0

Моя проблема проста: если я проверить версию GCC, я получаю 4.5.1, но CMake найти GCC 4.5.0:CMake найти неправильную версию GCC

> /usr/bin/gcc --version 
gcc (SUSE Linux) 4.5.1 20101208 [gcc-4_5-branch revision 167585] 
Copyright (C) 2010 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
> mkdir BUILD & cd BUILD 
> cmake .. 
-- The C compiler identification is GNU 4.5.0 
-- The CXX compiler identification is GNU 4.5.0 
-- Check for working C compiler: /usr/bin/gcc 
-- Check for working C compiler: /usr/bin/gcc -- works 
-- Detecting C compiler ABI info 
-- Detecting C compiler ABI info - done 
-- Check for working CXX compiler: /usr/bin/c++ 
-- Check for working CXX compiler: /usr/bin/c++ -- works 
-- Detecting CXX compiler ABI info 
-- Detecting CXX compiler ABI info - done 
-- The Fortran compiler identification is GNU 
-- Check for working Fortran compiler: /usr/bin/gfortran 
-- Check for working Fortran compiler: /usr/bin/gfortran -- works 
-- Detecting Fortran compiler ABI info 
-- Detecting Fortran compiler ABI info - done 
-- Checking whether /usr/bin/gfortran supports Fortran 90 
-- Checking whether /usr/bin/gfortran supports Fortran 90 -- yes 

Кто не прав? CMake или Gcc?

Я использую cmake 2.8.9, но у меня также есть ошибка с cmake 3.1.0.

У меня нет ошибки с gcc 4.7.2, 4.4.7 и 4.1.2.

+0

У вас есть [ 'toolchain.cmake'] (http://www.cmake.org/cmake/help/v3.0/ manual/cmake-toolchains.7.html) в вашем проекте CMake? –

+0

Нет, я не делаю кросс-компиляцию. CMake автоматически определяет инструментальную цепочку. – Caduchon

+0

Не обязательно кросс-компиляция, но звучало, что у вас есть параллельные связки GCC, установленные в вашей среде. –

ответ

1

Отвечая на мой вопрос.

На самом деле, GCC 4.5.1, кажется, есть ошибка, так как следующий простой код (поправьте согласно официальному документу: https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html) печатает 4.5.0 при компиляции с GCC 4.5.1 на моей рабочей станции.

#include <iostream> 
int main(int argc, char** argv) 
{ 
    std::cout << __GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__ << std::endl; 
    return 0; 
} 
+1

Скорее всего, Suse делает странные вещи в своей версии gcc. –

1

CMake использует , вероятно, это все еще указывает на gcc 4.5.0. Если вы хотите установить компилятор, добавьте -DCMAKE_CXX_COMPILER к компилятору, который вам нравится.

+0

Как я уже сказал, когда я запускаю '/ usr/bin/C++ --version', я получаю' 4.5.1'. И CMake cleary указывает, что это путь, используемый ... – Caduchon

+0

Вы сказали нам о/usr/bin/gcc, я имел в виду/usr/bin/C++. На самом деле/​​usr/bin/cc было бы лучше для компилятора C. – usr1234567

+0

Если я запускаю следующую команду '> cmake -DCMAKE_C_COMPILER =/usr/bin/cc -DCMAKE_CXX_COMPILER =/usr/bin/C++ ..', CMake говорит' - Идентификатор компилятора C - это GNU 4.5.0 - Идентификатор компилятора CXX - это GNU 4.5.0'. Если я запускаю '/ usr/bin/cc -version', он говорит' cc (SUSE Linux) 4.5.1 20101208 [gcc-4_5-branch revision 167585] '. – Caduchon

0

Решение, которое я нашел, было похоже на @ usr1234567, что по существу CMake использует cc и c++ где бы они ни от $PATH, который не всегда совпадает с gcc или g++.

Указание этих компиляторов фиксирует версию проявленной CMake:

cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ .. 
Смежные вопросы