2016-11-12 30 views
-3

我不知道是否可以從代碼中指定一個鏈接器選項?編譯器允許#pragma指令抑制警告;我們可以擴展多遠?是否可以從代碼指定鏈接器選項?

+2

簡潔地說,「不」。 –

+0

**你爲什麼要問**請**編輯你的問題**來激勵它,並給出更多的細節。聽起來像[XY問題](http://xyproblem.info/) –

回答

0

(我正在考慮連接隱含在Linux系統上,並使用GCC編譯器,你很可能的答案適應你的OS)

不,這是不可能的代碼,以指定的鏈接選項,並通知鏈接器正在處理對象文件(而不是其中的單個函數)。

但是,您的build procedure可能會從源代碼中提取鏈接器選項。舉例來說,如果你有很多單一來源程序的目錄(即,aa.cc C++源文件編譯成aa.bin可執行文件,bb.cc編成bb.bin等),你可能有一個Makefile

%.bin: %.cc 
     $(CXX) $(CXXFLAGS) $(shell awk /Link:/{print $2} $<) $^ -o [email protected] 

aa.cc像註釋:

/* the link option is 
    Link: -lfoo 
*/ 

順便說一句,你也可能有一些GCC pluginregisters並處理您的具體#pragma;如果您使用clang而不是gcc,您也可以使用一些Clang plugin;新的編譯指示可以在鏈接時使用的普通Sqlite數據庫中添加一些內容。

所以你可以做複雜的事情,但我只是建議有你自己的make rules來處理你的鏈接。

+0

謝謝你的幫助,XY問題是有道理的。我正在考慮是否可以實現一個基於宏生成不同程序入口點的測試框架,因爲這是不可能的,我會用腳本來實現它:) –

+0

不要忘記可以使用元編程技術;您可以使用一些生成C或C++代碼的腳本,或測試用例或編譯或鏈接命令。 –

相關問題