在windows中为gcc定义符号
我尝试在windows上使用链接器符号作为带有gcc的时间戳:在windows中为gcc定义符号,c,gcc,linker,timestamp,symbols,C,Gcc,Linker,Timestamp,Symbols,我尝试在windows上使用链接器符号作为带有gcc的时间戳: gcc.exe -DTIMESTAMP=$(shell "C:/mingw/msys/1.0/bin/date.exe +%s") -E helloworld.c -o test.E 但我得到的结果是: gcc.exe:错误:C:/mingw/msys/1.0/bin/date.exe+s):没有此类文件或 目录 命令行上的“C:/mingw/msys/1.0/bin/date.exe+s”可以工作 我做错了什么?这里有多个问题:
gcc.exe -DTIMESTAMP=$(shell "C:/mingw/msys/1.0/bin/date.exe +%s") -E helloworld.c -o test.E
但我得到的结果是:
gcc.exe:错误:C:/mingw/msys/1.0/bin/date.exe+s):没有此类文件或
目录
命令行上的“C:/mingw/msys/1.0/bin/date.exe+s”可以工作
我做错了什么?这里有多个问题:
$()
不是有效的命令行语法,它是一个bash
功能。您需要call
命令或cmd/C
shell
不是命令、批处理文件或二进制文件。如果你有一个与上面的子shell,它是不必要的%%
REM将date.exe的输出存储到临时文件中
C:/mingw/msys/1.0/bin/date.exe+%%s>tmpfile
REM将文件读入变量
SET/P格式的日期= < P>所有C99编译器(好,更像所有的C编译器)——绝对包括GCC和Visual C++,以及几乎任何你可能使用的通用C编译器都已经提供宏;你不使用它们有什么原因吗
它们扩展为字符串文本,引用预处理器运行的日期和时间<代码>\uuuuuuuuuuuuuuuuuu日期
扩展为“Mmm Dd YYYY”
,例如“2016年11月1日”
<代码>时间扩展为“hh:mm:ss”
,例如“23:59:59”
如果您想在对象文件中使用编译时间戳,可以使用
const char timestamp[] = __DATE__ " " __TIME__ ;
在你的C代码中
当您在一个较大的项目中需要一个共享宏时,通过多次调用编译器(比如在一个Makefile中)生成一个包含在所有编译命令中的头文件。比如说,
rm -f timestamp.h
date '+#define TIMESTAMP "%Y-%m-%d %H:%M:%S"' > timestamp.h
并将flag
-imacros timestamp.h
添加到GCC选项中。我尝试了“GCC.exe-dtimestap=$(shell C:/mingw/msys/1.0/bin/date.exe+%%s)-E helloworld.C-o test.E”,但没有更改任何内容。。。Givs me:gcc.exe:错误:+%s):没有这样的文件或目录您正在尝试从Windows控制台(“DOS提示符”/“命令提示符”)运行此命令吗?是。我写了一个bat文件来测试它。谢谢。我明白,但我无法让它发挥作用。什么是正确的选择?是的,我以前做过。但它只设置实际文件的时间。不适合整个项目。我需要一个解决方案,在每个构建中我的构建数量都会增加…@christoph.:那么,添加的方法如何?您甚至可以使用date'+#define BUILDNUMBER%s>BUILDNUMBER.h
(和-imacros BUILDNUMBER.h
)将其作为十进制数(从纪元开始算起的秒数)。@ChristophP.:要将其存储到字符串中,请使用例如#define STRINGIFY_x#x
,#define STRINGIFY x(STRINGIFY ux)
,和const char BUILDNUMBER[]=字符串化(BUILDNUMBER)代码>。
rm -f timestamp.h
date '+#define TIMESTAMP "%Y-%m-%d %H:%M:%S"' > timestamp.h