1. 程式人生 > >關於如何在make一個Linux下的C/C++工程時,自動新增版本號、編譯日期等資訊

關於如何在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$ 
[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
VERSION_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
//build.sh
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

即可看到如上效果