Я недавно тоже сталкивался с этой проблемой. Разделение проекта на подпроекты усложнило все и, по крайней мере, с моей первой попытки, не сработало. Затем я попробовал CONFIG += object_with_source
и CONFIG += object_parallel_to_source
, но оба, похоже, не работали с моей версией Qt.
Так вот, как я решил это (для Visual Studio 2010; я не знаю, работает ли то же самое с другими версиями):
Если бы это был обычный проект Visual Studio, а не проект, сгенерированный QMake, вы могли бы решить его, как описано здесь: Visual Studio 2010 & 2008 не может обрабатывать исходные файлы с одинаковыми именами в разных папках? (изменение выходного каталога объектных файлов на относительный каталог путем добавления %(RelativeDir)
в настройках проекта «C / C ++»> «Выходные файлы»> «Имя файла объекта»).
Очевидно, что вы не хотите делать это вручную каждый раз, когда создаете новый проект Visual Studio с помощью QMake, так почему бы не автоматизировать его? В конце концов, все файлы проекта 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
Не красивое решение, но оно работает.