關於如何在make一個Linux下的C/C++工程時,自動新增版本號、編譯日期等資訊
本篇的目的:在makefile裡,將系統當前的時間傳遞進待編譯的C/C++工程中,用以指示編譯執行的時間,以及版本資訊等。
不多說了,先來看效果:
當前時間:2017.01.20 0:29
編譯完成後執行效果:
[email protected]:~/Desktop/ccc$ ./test
============================
Soft version:V1.01
compile date:2017.01.20 0:29
============================
。。。。。。
過了8分鐘後,再次編譯執行:
[email protected]:~/Desktop/ccc$ ./build.sh
rm -f auto_version.h test main.o
Build start...
`touch auto_version.h`
cc -c -o main.o main.c
gcc main.o auto_version.h -o test
Build OK
[email protected]:~/Desktop/ccc$
[email protected]:~/Desktop/ccc$ ./test
============================
Soft version:V1.01
compile date:2017.01.20 0:37
============================
注意時間變化。
下面貼程式碼:
這就是關於如何make一個Linux下的C/C++工程時,自動新增版本號、編譯日期等資訊:
//main.c
#include <stdio.h>
#include "auto_version.h"
int main(int argc,char *argv[])
{
#ifdef VER_AUTO
printf("============================\n");
printf("Soft version:%s\n",VERSION);
printf("compile date:%s\n",DATE);
printf("============================\n");
#else
printf("============================\n");
printf("creat by ZhongKunjiang\n");
printf("mail: [email protected]\n");
printf("============================\n");
#endif
return 0;
}
//Makefile
//build.shVERSION_STRING := "V1.01" DATE_STRING := `date "+20%y.%m.%d %k:%M"` .PHONY:all all:test test:main.o auto_version.h gcc $^ -o [email protected] main.o:main.c auto_version.h auto_version.h: `touch auto_version.h` @echo "#define VER_AUTO 1" > auto_version.h # > :覆蓋文字原來內容 @echo "#define VERSION \"$(VERSION_STRING)\"" >> auto_version.h # >> :追加內容到文字末尾 @echo "#define DATE \"$(DATE_STRING)\"" >> auto_version.h # >> :追加內容到文字末尾 clean: rm -f auto_version.h test main.o
set -e #告訴bash如果任何語句的執行結果不是true則退出
make clean
echo -e "\e[36m""Build start...""\e[m" # "\e[36m" :設定列印顏色,"\e[m" :清除列印顏色
make all
echo -e "\e[36m""Build OK""\e[m"
接下來,chmod +x build.sh
執行 ./build.sh
編譯成功。
執行./test
即可看到如上效果