CMake 发现错误的 gcc 版本
CMake find wrong gcc version
我的问题很简单:如果我检查 gcc 版本,我得到 4.5.1
,但是 CMake 找到 gcc 4.5.0
:
> /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 的错误。
CMake 使用 /usr/bin/c++
可能这仍然指向 gcc 4.5.0。如果要设置编译器,在你喜欢的编译器后面加上-DCMAKE_CXX_COMPILER
。
回答我自己的问题。
实际上,gcc 4.5.1 似乎有一个错误,因为以下简单代码(根据官方文档正确:https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html)在我的工作站上使用 gcc 4.5.1 编译时打印 4.5.0
.
#include <iostream>
int main(int argc, char** argv)
{
std::cout << __GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__ << std::endl;
return 0;
}
我找到的解决方案与@usr1234567 类似,基本上 CMake 使用 cc
和 c++
,只要它们不在 $PATH
,这并不总是与 [=14 相同=] 或 g++
.
指定这些编译器修复了 CMake 显示的版本:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
我的问题很简单:如果我检查 gcc 版本,我得到 4.5.1
,但是 CMake 找到 gcc 4.5.0
:
> /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 的错误。
CMake 使用 /usr/bin/c++
可能这仍然指向 gcc 4.5.0。如果要设置编译器,在你喜欢的编译器后面加上-DCMAKE_CXX_COMPILER
。
回答我自己的问题。
实际上,gcc 4.5.1 似乎有一个错误,因为以下简单代码(根据官方文档正确:https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html)在我的工作站上使用 gcc 4.5.1 编译时打印 4.5.0
.
#include <iostream>
int main(int argc, char** argv)
{
std::cout << __GNUC__ << "." << __GNUC_MINOR__ << "." << __GNUC_PATCHLEVEL__ << std::endl;
return 0;
}
我找到的解决方案与@usr1234567 类似,基本上 CMake 使用 cc
和 c++
,只要它们不在 $PATH
,这并不总是与 [=14 相同=] 或 g++
.
指定这些编译器修复了 CMake 显示的版本:
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..