2017-10-02 4 views
1

システム名(Linux)、コンパイラgcc)またはアーキテクチャ(x86_64)をバイナリに含めるファイルに基本情報を保存するにはどうすればよいですか?CMake:バイナリにビルド/システム情報を格納する

このような.inファイルを書き込むためのすべてのコードはすでに存在しますが、関連するCMake変数はすべて空です。 CMAKE_SYSTEMまたはCMAKE_SYSTEM_PROCESSOR

set(NEWLINE "\\\\n") 
file(WRITE ${CMAKE_BINARY_DIR}/update_buildflags.cmake " 
file(WRITE \${DST} \"#define BUILDFLAGS \\\" 
    ARCH=\${CMAKE_SYSTEM}${NEWLINE} 
    COMP=\${CMAKE_SYSTEM_PROCESSOR}${NEWLINE} 
    BUILD=\${CMAKE_BUILD_TYPE}${NEWLINE}\\\"\n\")")  
add_custom_target(update_buildflags COMMAND ${CMAKE_COMMAND} 
    -DDST=${PROJECT_SOURCE_DIR}/src/buildflags.c 
    -P ${CMAKE_BINARY_DIR}/update_buildflags.cmake) 

このカスタムターゲットは、その後、メインバイナリおよび結果のファイルsrc/buildflags.cの依存関係として追加され、次のようになります

#define BUILDFLAGS " ARCH=\n COMP=\n BUILD=\n" 

なぜ使用CMakeの変数は、それらを印刷しているが空ですmessage()に正しい情報が表示されていますか?

CMAKE_SYSTEM: Linux-4.4.0-92-generic 
+0

質問は何ですか? – arrowd

+0

質問を編集しました。 – mattmilten

答えて

3

テンプレートファイルを使用すると、読みやすくすることができます。

  • プロ:cmakeの内のファイル全体を書き込む必要はありません
  • プロ:
  • コントラを編集するのは簡単:追加のファイルを

例のsrc /自動コード/ buildflags.h.in:

あなたのCMakeLists.txtで
#ifndef BUILD_FLAGS_H 
#def BUILD_FLAGS_H 
#define ARCH ${CMAKE_SYSTEM} 
#define COMP ${CMAKE_SYSTEM_PROCESSOR} 
#define BUILD ${CMAKE_BUILD_TYPE} 
// Add more of your stuff here 
#define APP_BUILD_WITH_CMAKE_VERSION "${CMAKE_VERSION}" 
#define APP_BUILD_ON_PLATFORM "${CMAKE_SYSTEM}" 
#endif // BUILD_FLAGS_H 

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/autocode/buildflags.h.in 
       ${CMAKE_BINARY_DIR}/buildflags.h) 
include_directories(${CMAKE_BINARY_DIR}) 
あなたのコードで

#include "buildflags.h" 
0

CMAKE _...変数にアクセスするときは、$の前に '\'を削除する必要があります。後で魅力的な作品。

+0

私はテンプレートを使用してクリーナーがあると思います。結局のところ、これは彼らのために作られたものです。 – legalize

関連する問題