强制使用cmake提供最新的gcc

强制使用cmake提供最新的gcc,gcc,g++,version,cmake,Gcc,G++,Version,Cmake,我正在将一个小应用程序部署到几个需要编译的不同系统(mac、linux、linux64)。我想告诉cmake一个特定系统中可用的最新gcc。例如,Mac10.6有GCC4.0和GCC4.2(默认)。但有些用户也通过MacPorts安装了GCC4.4(这不是默认设置)。我希望cmake在这种情况下使用gcc44。在其他linux系统中,最新的gcc是4.4或4.5,实现这一点的更健壮的方法是什么 谢谢 在检测C和C++编译器使用时,CMake尊重环境变量 cc和 CXX/COD>。例如,如果这些变

我正在将一个小应用程序部署到几个需要编译的不同系统(mac、linux、linux64)。我想告诉cmake一个特定系统中可用的最新gcc。例如,Mac10.6有GCC4.0和GCC4.2(默认)。但有些用户也通过MacPorts安装了GCC4.4(这不是默认设置)。我希望cmake在这种情况下使用gcc44。在其他linux系统中,最新的gcc是4.4或4.5,实现这一点的更健壮的方法是什么

谢谢


在检测C和C++编译器使用时,CMake尊重环境变量<代码> cc和 CXX/COD>。例如,如果这些变量指向clang,则默认情况下将使用clang:

$ export CC=/usr/bin/clang
$ export CXX=/usr/bin/clang++
$ cmake ..
-- The C compiler identification is Clang
-- The CXX compiler identification is Clang
-- Check for working C compiler: /usr/bin/clang
-- Check for working C compiler: /usr/bin/clang -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/clang++
-- Check for working CXX compiler: /usr/bin/clang++ -- works
...

您可以将它们定义为指向首选编译器的系统范围的环境变量,也可以编写一个小型shell包装器脚本,用于测试多个编译器的可用性,并在调用cmake之前相应地设置变量。

我必须将其添加到我的CMakeLists.txt中,以使其正常工作:

  if($ENV{CXX})
    set(CMAKE_CXX_COMPILER $ENV{CXX} CACHE FILEPATH "CXX Compiler")
  endif()
  if($ENV{CC})
    set(CMAKE_CC_COMPILER $ENV{CC} CACHE FILEPATH "CC Compiler")
  endif()

另一个技巧是确保使用您想要的GCC是在CMake之前执行以下操作:
export PATH=/PATH/to/my/gcc:$PATH

但是有没有办法在我的CMakeLists文件中指定编译器应该是
gcc
,版本大于某个版本?请注意,您可能需要
rm CMakeCache.txt
才能使用@sakra的代码片段。