2011-02-08 13 views
3

コンパイルが必要ないくつかの異なるシステム(mac、linux、linux64)に小さなアプリケーションを配備しています。私はcmakeに特定のシステムで利用可能な最新のgccを伝えたいと思います。たとえば、Mac 10.6にはgcc 4.0とgcc 4.2(デフォルト)があります。しかし、MacPortsを通じてgcc 4.4をインストールしているユーザーもいます(デフォルトではありません)。この場合、cmakeはgcc44を使用したいと思います。他のLinuxシステムでは、最新のgccは4.4または4.5ですこれを達成するためのより堅牢な方法は何ですか?最新のgccをcmakeで利用可能にする

おかげで、

H

答えて

8

CMakeのは、使用するCおよびC++コンパイラを検出した際に、環境変数CCCXXを称えます。例えば、これらの変数を打ち鳴らすために指している場合、それはデフォルトで打ち鳴らすを使用します。

$ 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 
... 

あなたが優先コンパイラを指して、システム全体の環境変数としてこれらを定義するかの可用性をテストする小さなシェルラッパースクリプトを書くことができますいずれかcmakeを呼び出す前に変数を設定します。

+0

感謝を。 – Hernan

+2

しかし、私のCMakeListsファイル内で、コンパイラは何かよりも大きなバージョンで 'gcc'を指定する方法がありますか? – becko

+1

@ sakraのコードスニペットを動作させるには 'rm CMakeCache.txt'が必要かもしれないことに注意してください。 – einpoklum

0

私はそれを動作させるために私の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() 
関連する問題