Tag: sed

是否有一个C预处理器可以消除#ifdefs但还会评估预处理器宏?

我有一个项目,做了很多这个 #if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,37) // do some legacy stuff #else // do current stuff #endif 其中KERNEL_VERSION定义为 #define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c)) 我想消除与当前版本无关的定义,但像sunifdef这样的工具不会评估KERNEL_VERSION宏,所以类似于 sunifdef –replace -DKERNEL_VERSION\(a,b,c\)=\(\(\(a\)\<\<16\)+\(\(b\)\<\<8\)+\(c\)\) -DLINUX_VERSION_CODE=3.13.1 * 失败了 sunifdef:错误0x04200:参数中的垃圾“-DKERNEL_VERSION(a,b,c)=(((a)<< 16)+((b)<< 8)+(c))” 我该如何解决这个问题?

如何在编译期间编辑可执行文件而不更改其源代码?

我必须编写一个编译文件year.c的Makefile,然后它会显示当前年份(2014),而不是前一年(2013)。我尝试过使用sed函数,但只有在我使用make时才有效跑 。 #include #ifndef YEAR #define YEAR “2013” #endif int main(){ printf(“Hello world from ” YEAR “\n”); return 0; } 和Makefile: year: year.c gcc year.c -o year run: ./year | sed -e ‘s/3/4/g’ clean: rm year Makefile