2013-03-08 175 views
2

我最近更新了我的OS X到Mountain Lion。不幸的是,FreeBSD切換到不支持OpenMP的編譯器套件(llvm/clang),我需要它,並且Apple將該套件設置爲默認編譯工具。cmake和默認編譯器

幸運的是,OS X 10.8包含一箇舊的gcc 4.2編譯器,仍然可以用於某些遺留代碼。

我使用cmake(v2.8)構建程序。爲了使用gcc編譯器,我首先嚐試在CMakeLists.txt腳本中設置兩個變量。更具體地說,我設置了CMAKE_C_COMPILERCMAKE_CXX_COMPILER。但是,設置這兩個變量不起作用:cmake使用不支持OpenMP的llvm編譯器。

然後我試着設置兩個環境變量,CCCXX(在.profile/.bashrc腳本中),指向用於CMake變量的相同編譯器。通過使用這兩個變量,我可以編譯我的源代碼。

我的問題是:兩個CMake變量(CMAKE _..._ COMPILER)有什麼意義?我該如何使用它們?

謝謝。

回答

7

這些變量確實可以使用,但必須在之前設置爲,編譯器會自動檢測到。你通常會做這樣使用命令行或高速緩存初始化腳本:

# by setting CC anc CXX 
CC=gcc-4.2 CXX=g++-4.2 cmake ... 

# by passing the definitions of CMAKE_{C,CXX}_COMPILER to cmake directly 
cmake -DCMAKE_C_COMPILER:FILEPATH=`which gcc-4.2` -DCMAKE_CXX_COMPILER:FILEPATH=`which g++-4.2` ... 

# by passing a cache-initialization script 
cmake -C init_cache.cmake 

該文件init_cache.cmake包含像

set(CMAKE_C_COMPILER CACHE FILEPATH /usr/bin/gcc-4.2) 
set(CMAKE_CXX_COMPILER CACHE FILEPATH /usr/bin/g++-4.2) 
+0

感謝您非常明確的答案的事情。 – 2013-03-08 11:26:56

+2

我只是補充說,第一個選項(env。vars'CC'和'CXX')通常被視爲爲CMake選擇編譯器的首選方式。 **和**必須在新的二叉樹中完成。一旦CMake檢測到編譯器,它們就會被燒入其緩存中(並且很可能也是'CMakeTemp')。 – Angew 2013-03-08 11:27:26

+1

你非常歡迎。請注意,第一種方法(即設置「CC」和「CXX」)被CMake開發者認爲是首選。我發現最後一種方法在使用自動構建時非常有用。 – 2013-03-08 11:28:40