CMake:以二进制形式存储构建/系统信息

时间:2017-10-02 10:01:41

标签: cmake

如何将基本信息(如系统名称Linux),已使用的编译器gcc)或体系结构(x86_64)存储在我包含在二进制文件中的文件中?< / p>

编写这样的.in文件的所有代码已经存在,除了相关的CMake变量都是空的,例如CMAKE_SYSTEMCMAKE_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

2 个答案:

答案 0 :(得分:3)

您可以使用模板文件使其更具可读性。

  • Pro:无需在cmake中编写整个文件
  • Pro:易于编辑
  • Contra:附加档案

示例src / autocode / buildflags.h.in:

#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

在您的CMakeLists.txt

configure_file(${CMAKE_CURRENT_SOURCE_DIR}/autocode/buildflags.h.in 
               ${CMAKE_BINARY_DIR}/buildflags.h)
include_directories(${CMAKE_BINARY_DIR})

在您的代码中

#include "buildflags.h"

答案 1 :(得分:0)

您需要删除&#39; \&#39;在$访问CMAKE _...变量之前。之后就像魅力一样。