2012-09-10 66 views
0

一位朋友和我正在使用Qt Creator和Boost構建遊戲引擎。到目前爲止,我們有這樣的想法,即引擎將成爲一個共享庫,我們可以用一個測試可執行文件運行它,這個可執行文件將變成我們最終想要製作的遊戲。構建共享庫,將頭文件更新到編譯器/系統目錄

問題主要是頭文件。我希望找到某種方式讓Qt Creator能夠在引擎的最新版本構建完成或即使添加時立即識別頭文件。起初,我在想Python中的一個腳本,在引擎生成後作爲Qt Creator中的構建步驟執行,只需將頭文件複製到系統目錄(例如/usr/include - 如果在* nix系統上運行), IDE將在將引擎與測試可執行文件鏈接時識別頭文件,並且我們還將擁有完整的自動完成支持。

當然,會使用環境變量,雖然我更喜歡在Linux中開發,但我的朋友更喜歡Windows,所以我們同意關注我們各自平臺偏好的開發。

儘管這似乎是一個很好的解決方案,但我認爲這個Python腳本的想法可能已經過時了。有一個更好的方法嗎?

更新

從所建議的QMAKE劇本,我最終得到這個錯誤。

cp -f "/home/amsterdam/Programming/atlas/Engine/AtlasEngine/"AtlasEngine_global.h "/" 
cp: cannot create regular file `/AtlasEngine_global.h': Permission denied 
make: Leaving directory `/home/amsterdam/Programming/atlas/Engine/AtlasEngine__GCC__Linux__Debug' 
make: *** [libAtlasEngine.so.1.0.0] Error 1 
15:20:52: The process "/usr/bin/make" exited with code 2. 
Error while building project AtlasEngine (target: Desktop) 
When executing build step 'Make' 

我調整如下所示:

# Copy over build artifacts 
SRCDIR = $$ATLAS_PROJ_ROOT 
DESTDIR = $$ATLAS_INCLUDE 

# Look for header files there too 
INCLUDEPATH += $$SRCDIR 

# Dependencies: mylib. Only specify the libs you depend on. 
# Leave out for building a shared library without dependencies. 
#win32:LIBS += $$quote($$SRCDIR/mylib.dll) 
# unix:LIBS += $$quote(-L$$SRCDIR) -lmylib 

DDIR = \"$$SRCDIR/\" #<--DEFAULTS 
SDIR = \"$$IN_PWD/\" 

# Replace slashes in paths with backslashes for Windows 

win32:file ~= s,/,\\,g 
win32:DDIR ~= s,/,\\,g 
win32:SDIR ~= s,/,\\,g 

for(file, HEADERS) { 
    QMAKE_POST_LINK += $$QMAKE_COPY $$quote($${SDIR}$${file}) $$quote($$DDIR) $$escape_expand(\\n\\t) 
} 

回答

1

我設法這個使用一些QMAKE魔力,跨平臺工作需要克服。它將共享庫(.dll.so文件)以及頭文件複製到當前項目旁邊目錄dll中的目錄中。

將此文件放入.pro文件的末尾,並相應地更改路徑/庫。

# Copy over build artifacts 
MYDLLDIR = $$IN_PWD/../dlls 
DESTDIR = \"$$MYDLLDIR\" 

# Look for header files there too 
INCLUDEPATH += $$MYDLLDIR 

# Dependencies: mylib. Only specify the libs you depend on. 
# Leave out for building a shared library without dependencies. 
win32:LIBS += $$quote($$MYDLLDIR/mylib.dll) 
unix:LIBS += $$quote(-L$$MYDLLDIR) -lmylib 

DDIR = \"$$MYDLLDIR/\" 
SDIR = \"$$IN_PWD/\" 
# Replace slashes in paths with backslashes for Windows 
win32:file ~= s,/,\\,g 
win32:DDIR ~= s,/,\\,g 
win32:SDIR ~= s,/,\\,g 
for(file, HEADERS) { 
    QMAKE_POST_LINK += $$QMAKE_COPY $$quote($${SDIR}$${file}) $$quote($$DDIR) $$escape_expand(\\n\\t) 
} 

然後調整LD_LIBRARY_PATH在你的項目中的「運行設置」指向同一個dll目錄(相對)。

是的,這是醜陋的空間和反斜槓的路徑轉義,但我發現這是很好的跨平臺。 Windows(XP,7)和Linux測試。是的,它包括爲了運行項目而改變的環境設置,但至少你不再需要外部(Python)腳本,或者將它安裝到需要root權限的系統目錄。

改進是值得歡迎的。

+0

哇,謝謝!我會盡快進行測試。 – zeboidlund

+0

好吧,測試它,但它不工作。我用我所做的更改更新了我的帖子。你知道爲什麼會出現這種情況嗎? – zeboidlund

+0

@aboutblank出於某種原因,它正在複製到系統中的''/'',以便它無權寫入(沒有意外)。你確定你在項目文件的其他地方指定了正確的'$$ ATLAS_INCLUDE'路徑嗎?在for循環中''DDIR''似乎是''/''在你的情況。 – gertvdijk

0

我不確定是否有其他人會有這個問題,但無論出於何種原因,Qmake無法正確訪問我的用戶指定的環境變量。

因此,既然是這樣,我想到的一個解決方案是將變量添加爲Qmake配置變量。

如果你在一個基於UNIX系統的時候,你會想要做的第一件事就是追加QMAKE的位置 - 這應該躺在你QTSDK文件夾 - 您的系統$PATH,像這樣:

export PATH=$PATH:/path/to/QtSDK/...../qmake_root

從那裏,你可以做線沿線的東西:

qmake -set "VARIABLE" "VALUE"

在這種情況下,我壓根兒:

qmake -set "ATLAS_PROJ_ROOT" $ATLAS_PROJ_ROOT

VAR = $$[ATLAS_PROJ_ROOT]

更多信息,可以發現here

然後我訪問它在我的Qmake工程文件(.PRO)。

相關問題