Спокойные Конфликты имени файла MOC с помощью нескольких .pri файлов

Для хранения моего спокойного проекта несколько организованным (использование спокойного Создателя), у меня есть один .pro файл и несколько .pri файлов. Просто недавно я добавил класс к одному из моих .pri файлов, который имеет то же имя файла как класс, который уже существовал в отдельном .pri файле.

Файловая структура и make-файлы, сгенерированные qmake, кажется, не обращают внимания на конфликт имени файла, который следует. Сгенерированные moc_* файлы все брошены в тот же подкаталог (или выпуск или отладка, завися) и каждый заканчивает перезапись другого. Когда я пытаюсь сделать проект, я получаю несколько предупреждений, которые похожи на это:

Makefile.Release:318: warning: overriding commands for target `release/moc_file.cpp`

И проекту не удается связаться.

Вот простой пример того, о чем я говорю.

Структура каталогов:

+ project_dir
| + subdir1
| | - file.h
| | - file.cpp
| + subdir2
| | - file.h
| | - file.cpp
| - main.cpp
| - project.pro
| - subdir1.pri
| - subdir2.pri

Содержание project.pro:

TARGET = project
TEMPLATE = app
include(subdir1.pri)
include(subdir2.pri)
SOURCES += main.cpp

Содержание subdir1.pri:

HEADERS += subdir1/file.h
SOURCES += subdir1/file.cpp

Содержание subdir2.pri:

HEADERS += subdir2/file.h
SOURCES += subdir2/file.cpp

Существует ли способ сказать qmake генерировать систему, которая помещает moc_* файлы от, разделяют .pri файлы на отдельные подкаталоги?

7
задан Stephen 2 June 2010 в 16:24
поделиться

3 ответа

Лучше всего убедиться, что все файлы имеют уникальное имя. Помимо qmake, есть и другие инструменты, которые также сломаются, когда вы попытаетесь сделать то, что делаете; вы также можете запутать себя (например, понять, что делает #include "file.h" , труднее).

3
ответ дан 7 December 2019 в 07:40
поделиться

Я пробовал это раньше. Короткий ответ — назвать их как-то по-другому. Другим ответом было бы рассматривать каждый подкаталог как отдельную библиотеку со своим собственным файлом .pro и использовать тип поддийных для компиляции всех каталогов библиотеки.

Если вы действительно хотите исследовать полный ответ, вы можете указать инструмент, который будет использоваться для moc. В этом случае можно исправлять имя, чтобы для двух разных файлов использовалось немного другое имя. Тем не менее, вам также нужно будет убедиться, что каждый файл с разными именами добавлен в список файлов для компиляции и связывания, а изначально -именованный файл moc не является (или сборка завершится ошибкой).

0
ответ дан 7 December 2019 в 07:40
поделиться

В subdir1.pri попробуйте добавить

MOC_DIR = "subdir1/MOCFiles"

Также для subdir2.pri дайте

MOC_DIR = "subdir2/MOCFiles"

Это не проверено. Просто проверьте это. Надеюсь, это сработает.

Edit 1 : Где MOCFiles - это ваша желаемая папка для moc файлов, в которую вы хотите попасть.

Edit 2 : Я просто перестал упоминать о директории MOC-файлов, так как это было специально задано в вопросе. Но дополнительно вы можете добавить следующее в каждый из файлов pri. (Убедитесь, что папки разные для разных *.pri файлов)

RCC_DIR = "subdir1/RCCFiles"
UI_DIR = "subdir1/UICFiles"
OBJECTS_DIR = "subdir1/ObjFiles"

Я считаю, что несколько pri файлов могут работать без коллизий, имея одинаковые имена файлов. Поскольку вы приняли ответ (в котором говорится, что это невозможно), внесите вышеуказанные изменения и попробуйте. Сообщите, если это не сработает.

4
ответ дан 7 December 2019 в 07:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: