2014-10-29 117 views
0

簡單的問題是這些在編譯期間不必調用庫的方法嗎?我的意思是,我想簡單地調用g ++ main.cpp而不調用g ++ main.cpp -lGL -lGLU -lGLEW -lSTL -lMyMother等等......我知道,makefile或簡單的shell腳本,但是我想使它優雅的方式 - 在cpp代碼中調用這些庫 - 就像'使用GL'一樣。g ++:編譯時沒有-l標誌

+1

不,與VC++不同,沒有辦法通過在源代碼中指定它來告訴GCC哪些庫鏈接到哪個庫。使用makefile。 – 2014-10-29 19:45:47

回答

2

由於您使用的是GCC,因此您可以創建/修改specs file以添加所需的標誌。

如果你不喜歡鍵入標誌,你確實應該使用makefile。

+0

嗯,我想你是對的 - 每個人都在使用Makefiles是有原因的。 ;) – 2014-10-29 19:24:01

+1

不要修改規格文件以在其中添加庫。 – 2014-10-29 19:40:49

1

從技術上講,你可以通過dlopen()動態加載庫並調用它的函數(我假設你在* nix上)。雖然這不是一回事,我懷疑會讓你的生活更輕鬆。除此之外,沒有指定在源文件中使用哪個庫的便攜方式。

+0

謝謝,得試試這個方法。我只應該記住,如果某件事不起作用,那是因爲我的懶惰。 – 2014-10-29 19:24:38

1

在Linux上,您可以使用pkg-config和shell擴展。使用pkg-config --list-all來發現它已知的軟件包(您可以添加.pc文件來添加新軟件包)。例如,GTK應用mygtkapp.c可以用

gcc -Wall -g $(pkg-config --cflags gtk+-x11-3.0) -c mygtkapp.c 

後來與

gcc -g mygtkapp.o $(pkg-config --libs gtk+-x11-3.0) -o mygtkapp 

注意的參數gcc順序總是問題鏈接進行編譯。當然,使用g++來編譯C++應用程序GCC

也考慮使用Makefile,如this one。然後,只需鍵入make即可構建您的軟件(例如make clean來清理構建樹)。

您可能會在您的Makefile中使用奇怪的技巧,例如用awk解析你的C++代碼中的一些註釋來提供make,但我認爲這是一個壞主意。

從技術上講,你仍然可以通過-I-D標誌(在編譯時)和-L-l標誌(在連接時),以gccg++pkg-config實用程序(或make ....)正在產生這些標誌。

如果您使用emacs編輯源代碼,則可以在C文件末尾添加註釋以設置emacs的一些編譯命令,請參閱this

PS。我不建議爲此目的配置您的GCC規格文件。