[英]Can the gcc C preprocessor use the output of a shell command?
例如,'uname -a'的输出可以用于创建下面的COMPILED_ON宏吗?
#include <stdio.h>
#define COMPILED_ON `call uname -a and use the output as a quoted string'
int main( int argc, char **argv ) {
printf( COMPILED_ON );
return 0;
}
不是,但:
gcc -DCOMPILED_ON="$(uname -a)"
我不认为你可以用GNU预处理器做到这一点,但肯定不能用普通的标准预处理器来做; 相反,我认为这是Makefile的工作。
让它运行uname -a
并将其存储在Makefile变量中,该变量将用于为编译器创建正确的-D
指令。
您还可以使Makefile创建一个包含宏定义的.h
文件,该文件将由需要COMPILED_ON
宏的文件#include
d。 这有额外的好处,即独立于编译器特定的选项来定义宏。
请注意,这些建议也适用于构建除了良好的制作之外的工具。
不是那样的,没有。
你需要这样做:
gcc "-DCOMPILED_ON=\"`uname -a`\"" -c file.c -o file.o
或者,让你的makefile创建一个简单的.h文件:
echo "#define COMPILED_ON \"`uname -a`\"" > compiledon.h
然后#include "compiledon.h"
你需要\\"
部分才能得到一个可用的字符串。
如果您碰巧使用CMake我有一个很好的片段,可能会帮助一些:
# This ensures the SHA1 git ref is shown within the app
execute_process(COMMAND git rev-parse HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GITSHA1REF)
string(REGEX REPLACE "\n$" "" GITSHA1REF "${GITSHA1REF}")
message(STATUS "GITSHA1REF = ${GITSHA1REF}")
add_definitions("-DGITSHA1REF=\"${GITSHA1REF}\"")
有了这个,我得到了当前的Git SHA1哈希并在我的C ++代码中使用它:
std::cout << "Git-SHA1: " << GITSHA1REF << std::endl;
不,但你可以以不那么脆弱和SCCS敌对的方式实现你的目标。
让make target运行shell脚本来创建.h
文件。
通过shell命令设置一个make变量并传递-D
。 并非所有make(1)
实现都支持此功能。
让make目标使用包含shell命令的-D运行编译器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.