2011-10-26 12 views
25

私のライブラリのバージョン番号を1か所に保存したいと思います。だから私はcmakeのファイルで、このような変数を定義しています。この定義にC++ソースコードでCMake変数を読み取る方法

SET(LIBINTERFACE_VERSION 1 CACHE INTEGER "Version of libInterface") 

私はライブラリにコンパイルし、その後の特性に正しく表示され、Microsoftの定義に従ってversion.rcファイルを生成することができます私のDLLファイルのウィンドウ。

私はこのCMake変数をC++ソースコードにも使用したいと思いますが、実際にはうまくいきません。

#ifndef VERSION_LIBINTERFACE 
    # define VERSION_LIBINTERFACE @[email protected] 
    #endif 

またはこの:私はこのように異なるものを試してみた

unsigned int getLibInterfaceVersion() 
    { 
     return @[email protected]; 
    } 

をしかし、コンパイラは何も受け付けません。私のCMake-Documentationの研究は結果が得られなかったので、誰かが私に必要不可欠な助言を与えることができることを願っています。

ありがとうございます。

+0

この変数値をプリコンパイラ定数としてコンパイラに渡す必要があります。正確な構文は、使用されるコンパイラによって異なります。 –

+0

私はVisual Studio 2010コンパイラを使用しています。ですから、http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspxにリストされている定数のように使用できますか?あなたは私に例を挙げることができますか? – Snowfox

答えて

43

これを行う最も簡単な方法は、add_definitionと定義としてLIBINTERFACE_VERSIONを渡すことです:

add_definitions(-DVERSION_LIBINTERFACE=${LIBINTERFACE_VERSION}) 

しかし、あなたはまた、「ヘッダ・ファイルのテンプレート」を作成し、configure_fileを使用することができます。このようにして、CMakeは@ LIBINTERFACE_VERSION @を置き換えます。余分な定義や変数をここに簡単に追加できるので、これはもう少し拡張性があります。

このように見て、「version_config.h.in」のファイルを作成します。

#ifndef VERSION_CONFIG_H 
#define VERSION_CONFIG_H 

// define your version_libinterface 
#define VERSION_LIBINTERFACE @[email protected] 

// alternatively you could add your global method getLibInterfaceVersion here 
unsigned int getLibInterfaceVersion() 
{ 
    return @[email protected]; 
} 

#endif // VERSION_CONFIG_H 

は、その後、あなたのcmakelists.txtにconfigure_fileの行を追加します。
configure_file(version_config.h.in ${CMAKE_BINARY_DIR}/generated/version_config.h) 
include_directories(${CMAKE_BINARY_DIR}/generated/) # Make sure it can be included... 

そしてもちろんの

は、正しいversion_configことを確認してください。 hはソースファイルに含まれています。

+1

ありがとうございます。それが私が探し求めたものでした。 – Snowfox

+1

add_definitionsはおそらくもっと簡単です – frankliuao

+0

@frankliuao。合意した、それが私の答えの最初の文章なのです。 –

関連する問題