web-dev-qa-db-ja.com

C ++ソースコードでCMake変数を読み取る方法

ライブラリのバージョン番号を1か所に保存したい。だから私はCMakeファイルでそのような変数を定義しました:

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

この定義を使用して、Microsoftの定義に従ってversion.rcファイルを生成できます。このファイルをライブラリにコンパイルすると、dllファイルのプロパティウィンドウに正しく表示されます。

このCMake変数をc ++ソースコードでも使用したいのですが、実際には機能する解決策がありません。私はこのようなさまざまなことを試しました:

    #ifndef VERSION_LIBINTERFACE
    #  define VERSION_LIBINTERFACE @LIBINTERFACE_VERSION@
    #endif

またはこれ:

    unsigned int getLibInterfaceVersion()
    {
        return @LIBINTERFACE_VERSION@;
    }

しかし、コンパイラーは何も受け入れません。 CMake-Documentationでの私の研究結果は得られなかったので、誰かが私に本質的なアドバイスをしてくれることを願っています。

前もって感謝します。

38
Snowfox

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

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 @LIBINTERFACE_VERSION@

// alternatively you could add your global method getLibInterfaceVersion here
unsigned int getLibInterfaceVersion()
{
    return @LIBINTERFACE_VERSION@;
}

#endif // VERSION_CONFIG_H

次に、configure_file行をcmakelists.txtに追加します。

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がソースファイルに含まれていることを確認してください。

59
André