我的Qt項目有兩個源文件,名稱相同但文件夾不同。 親文件是:如何使用qmake和兩個同名的源文件?
SOURCES = A/Test.cpp
SOURCES += B/Test.cpp
它可以產生通過Qt的Visual Studio的插件Visual Studio解決方案文件,但它不會工作,因爲生成的目標文件具有相同的名稱:Test.obj。 這將導致LNK2001未解析的外部符號,因爲其中一個Test.obj被覆蓋。
如何編寫適當的pro文件來處理?
我的Qt項目有兩個源文件,名稱相同但文件夾不同。 親文件是:如何使用qmake和兩個同名的源文件?
SOURCES = A/Test.cpp
SOURCES += B/Test.cpp
它可以產生通過Qt的Visual Studio的插件Visual Studio解決方案文件,但它不會工作,因爲生成的目標文件具有相同的名稱:Test.obj。 這將導致LNK2001未解析的外部符號,因爲其中一個Test.obj被覆蓋。
如何編寫適當的pro文件來處理?
您應該考慮在多個項目中分割您的解決方案,但這取決於這些文件夾中的每個文件夾是否可以由其自己代表項目。 如果您選擇此解決方案,則必須爲每個項目編寫一個.pro文件。通常的方法走的是寫一個 '通用' *這是從每一個* .pro文件包含.pri文件:
folder1.pro
TEMPLATE=lib
TARGET=folder1
include(../common.pri)
folder2.pro
TEMPLATE=lib
TARGET=folder2
include(../common.pri)
common.pri(在父目錄中)
SOURCES += *.cpp
HEADERS += *.h
# etc.
很明顯,每個pro文件的內容取決於您的解決方案。
如果你不想在多個項目中拆分源文件,我猜,更簡單的解決方案是重命名一個衝突的文件。
你可以嘗試添加該行到您的.pro文件:
CONFIG += object_with_source
但作爲選項顧名思義,.OBJ文件將不會在亂源/「陰影編譯」創建目錄。
該選項已被替換爲Qt 5中的object_parallel_to_source
,該選項應與影樓一起工作。
我最近也遇到過這個問題。將項目拆分成子項目使得一切都變得更加複雜,至少在我第一次嘗試時,扁平化不起作用。然後我嘗試了CONFIG += object_with_source
和CONFIG += object_parallel_to_source
,但兩者似乎都不適用於我的Qt版本。
所以這是我如何解決它(爲Visual Studio 2010,我不知道,如果作品與其他版本相同):
如果該項目是一個普通的Visual Studio項目,而不是一個由QMAKE產生Visual Studio 2010 & 2008 can't handle source files with identical names in different folders?(改變目標文件的輸出目錄的相對目錄通過附加在項目設置中的「C/C++」>「輸出文件」>「目標文件名」 %(RelativeDir)
),如下所述,你可以解決這個問題。
很顯然,你不想做手工這每次你創建QMAKE一個新的Visual Studio項目,那麼爲什麼不使自動化呢?畢竟Visual Studio項目文件是普通的XML文件。在設置選項之前和之後查看差異顯示它保存在一個名爲ObjectFileName
的獨特標籤中。
所以我寫了這Python腳本:
import sys
filename = sys.argv[1]
f = open(filename, "r", -1, "utf-8-sig")
lines = f.readlines()
f.close()
f = open(filename, "w", -1, "utf-8-sig")
for line in lines:
line = line.replace("</ObjectFileName>", "%(RelativeDir)\</ObjectFileName>")
f.write(line)
f.close()
..和使用它像這樣在我的BAT文件,我一直呼籲建立Visual Studio項目:
qmake -tp vc myproject.pro
@cd ../scripts
unflatten_vcproj_obj_output.py "../src/myproject.vcxproj"
@pause
不是一個美麗的解決方案,但它的工作。
一種解決方案是重命名這些文件:
A/a_Test.cpp
B/b_Test.cpp
這是一個有點難看,但它的簡單和類名可以保持不變。
注意:此功能已被刪除,http://qt.gitorious.org/qt/qtbase/commit/a72420d012fd09f0a79ae75b77eb1c3bbff75669/diffs –
刪除提交的新地址:http://code.qt.io/cgit/ QT/qtbase.git /提交/?ID = a72420d012fd09f0a79ae75b77eb1c3bbff75669 – SGaist