Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake:以二进制形式存储构建/系统信息_Cmake - Fatal编程技术网

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

CMake:以二进制形式存储构建/系统信息,cmake,Cmake,如何将基本信息(如系统名称(Linux)、使用的编译器(gcc)或体系结构(x86_64)存储在包含在二进制文件中的文件中 在文件中写入这样一个。的所有代码都已经存在,除了相关的CMake变量都是空的,例如CMake\u系统或CMake\u系统处理器: set(NEWLINE "\\\\n") file(WRITE ${CMAKE_BINARY_DIR}/update_buildflags.cmake " file(WRITE \${DST} \"#define BUILDFLAGS \\\"

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

在文件中写入这样一个
。的所有代码都已经存在,除了相关的CMake变量都是空的,例如
CMake\u系统
CMake\u系统处理器

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
如下所示:

#定义构建标志“ARCH=\n COMP=\n BUILD=\n”
为什么使用的CMake变量是空的,尽管使用
message()打印它们可以显示正确的信息

CMAKE_SYSTEM: Linux-4.4.0-92-generic

访问CMAKE时,您需要删除$前的“\”。。。变量。之后会像一个符咒一样工作。

在访问CMAKE时,您需要删除$前的“\”。。。变量。工作起来就像一个符咒。

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

  • 赞成:不需要在cmake中写入整个文件
  • 优点:易于编辑
  • 反面:附加文件
示例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"

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

  • 赞成:不需要在cmake中写入整个文件
  • 优点:易于编辑
  • 反面:附加文件
示例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"

问题是什么?我编辑了问题。问题是什么?我编辑了问题。我认为使用模板更干净。毕竟,这就是它们的用途。我认为使用模板更干净。毕竟,这就是它们的用途。