2011-03-15 28 views

回答

12

沒有,但是:

gcc -DCOMPILED_ON="$(uname -a)" 
3

不是這樣,沒有。

你需要做的:

gcc "-DCOMPILED_ON=\"`uname -a`\"" -c file.c -o file.o 

另外,有你的makefile創建一個簡單的.h文件中:

echo "#define COMPILED_ON \"`uname -a`\"" > compiledon.h 

然後#include "compiledon.h"

你需要的\"部分爲了得到一個可用的字符串。

0

沒有,但你可以在一個不那麼脆弱和SCCS敵對的方式實現自己的目標。

  1. 讓make目標運行shell腳本來創建.h文件。

  2. 有一個make變量通過shell命令設置自己並傳遞一個-D。並非所有的make(1)實現都支持這一點。

  3. 讓您的make target使用包含shell命令的-D運行編譯器。

4

我不認爲你可以用GNU預處理器做到這一點,但它確實無法用普通的標準預處理器來完成;相反,我認爲這是Makefile的工作。

讓它運行uname -a並將其存儲在Makefile變量中,該變量將用於爲編譯器創建正確的-D指令。

您也可以使Makefile創建一個包含宏定義的文件.h,該文件將由需要COMPILED_ON宏的文件生成d。這有額外的好處,獨立於編譯器特定的選項來定義宏。

請注意,這些建議也適用於構建除了良好製作之外的工具。

0

如果你碰巧使用CMake的我有一個很好的片段,這可能有助於一些:

# This ensures the SHA1 git ref is shown within the app 
execute_process(COMMAND git rev-parse HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} OUTPUT_VARIABLE GITSHA1REF) 
string(REGEX REPLACE "\n$" "" GITSHA1REF "${GITSHA1REF}") 
message(STATUS "GITSHA1REF = ${GITSHA1REF}") 
add_definitions("-DGITSHA1REF=\"${GITSHA1REF}\"") 

有了,我得到當前的Git SHA1哈希值,並使用它像這樣在我的C++代碼:

std::cout << "Git-SHA1: " << GITSHA1REF << std::endl;