【发布时间】:2012-07-13 00:05:52
【问题描述】:
我发现了如何使用 Makefile 添加带有日期和内部版本号的链接变量的绝妙示例:
OBJECTS=main.o
BUILD_NUMBER_LDFLAGS = -Xlinker --defsym -Xlinker __BUILD_DATE=$$(date +'%Y%m%d')
BUILD_NUMBER_LDFLAGS += -Xlinker --defsym -Xlinker __BUILD_NUMBER=$$(cat buildnumber.num)
a.out: $(OBJECTS) buildnumber.num
$(CC) $(LDFLAGS) $(BUILD_NUMBER_LDFLAGS) -o $@ $(OBJECTS)
buildnumber.num: $(OBJECTS)
@if ! test -f buildnumber.num; then echo 0 > buildnumber.num; fi
@echo $$(($$(cat buildnumber.num)+1)) > buildnumber.num
但我在 CMakeLists.txt 中重复此操作的所有尝试都失败了...:-( 例如:
ADD_CUSTOM_COMMAND(OUTPUT buildnumber.num
COMMAND @if ! test -f buildnumber.num; then echo 0 > buildnumber.num; fi
COMMAND @echo $$(($$(cat buildnumber.num) + 1)) > buildnumber.num)
file (GLOB_RECURSE MAIN_SOURCES FOLLOW_SYMLINKS ./src/*.cpp)
add_custom_target(buildnumber.num DEPENDS ${MAIN_SOURCES})
我将非常感谢如何在 cmake 中实现这一点。
【问题讨论】:
-
您真的希望它由链接器添加吗?或者是单个重新配置的.cpp 文件有两个#defines 也可以(见stackoverflow.com/questions/7900661/…)?
-
是的,我愿意。因为链接器变量将始终具有正确的值,我希望它们在每次编译时更新。此外,使用链接器变量要快得多,因为不需要重新编译...:-)