2013-01-15 131 views
0

我的工作有哪些包含類似功能模板一些頭文件共享庫時的ifdef。但是,如果有人想鏈接到這個庫,我不希望他們在包含這些頭文件時不得不拿起我的編譯器標誌。是否有編譯庫時解決這些#ifdefs,從而使生成的頭文件看起來是這樣的方式:解決編譯共享庫

void functionA(...); 

回答

0

前面有個答案暗指這種方法,即如果定義了somecompilerflag,那麼當編譯頭文件(實際上覆制到另一個目錄)時,在文件頂部插入#define somecompilerflag。爲使Makefile,沿着線的東西:什麼改變你的第一個預處理器指令進行的#ifndef代替的#ifdef

ifeq ($(somecompilerflag),-Dsomecompilerflag) 
    sed '1 i\#define somecompilerflag' $(header) > headersDir/$(header) 
else 
    cp $(header) headersDir/$(header) 
endif 
0

您可以添加定義了你的Makefile。你可以看看這裏如何做到這一點:Passing C/C++ #defines to makefile

+0

我知道如何獲取_my_代碼來獲取定義,但是我希望_other_代碼不需要。 –

1

如果你的目標的Linux &合作,有一種叫「pkg配置」,這是爲一個特定的安裝庫檢索編譯器和連接器設置了一個框架。另一種選擇是編寫sed腳本將模板頭文件轉換爲正確的版本進行安裝。我甚至在編譯這個庫之前就這麼做了,因爲那樣你可以確保在編譯時使用相同的頭文件並且它適合。

0

這樣,如果沒有設置標誌,FUNCTION將解析爲functionA,這聽起來像你想要的。

如果您想進一步研究並使其他人甚至不會看到預處理器指令,那麼您可以簡單地通過預處理器運行代碼,並將結果輸出交給人員。

+0

我希望用戶在編譯庫時能夠選擇'functionA'或'functionB',但是在那之後不需要擔心我的編譯器標誌。兩者同樣可能。我也想給人們編譯庫的代碼,而不僅僅是編譯版本(可能是系統特定的)。 –