Вопрос:
У меня есть один проект, в который включены все мои файлы .h и .cpp. Этот проект создает мое приложение. В другом проекте есть все мои модульные тесты, для которых в качестве первого проекта требуются те же файлы .h и .cpp. Поэтому каждый раз, когда я добавляю новый файл в свой первый проект, я должен добавить его ко второму проекту, поэтому я попытался автоматизировать этот шаг.
Для этого я попытался использовать функцию qmake для файлов (glob), которая выглядит в основном так:
HEADERS += someotherstuff.h files(../Core/DriveProgramInterface/*.h) files(../Core/DriveProgramWizard/*.h) SOURCES += someotherstuff.cpp files(../Core/*.cpp) files(../Core/DriveProgramInterface/*.cpp) files(../Core/DriveProgramWizard/*.cpp)
Итак, хотя он хорошо работает с заголовками, он вообще не работает с источниками. Когда я пытаюсь скомпилировать, я получаю следующую ошибку:
Нет правил для создания целевых файлов (../Core/DriveProgramWizard/.cpp), необходимых для ‘debug/.o’. Стоп
Итак, я посмотрел на свой MakeFile, и я нашел это:
SOURCES = someotherstuff.cpp files(..Core*.cpp) files(..CoreDriveProgramInterface*.cpp) files(..CoreDriveProgramWizard*.cpp) OBJECTS = someotherstuff.cpp debug/*.o debug/*.o debug/*.o
Итак, я думаю, может быть, проблема в том, что glob не разрешен в MakeFile, но вместо этого он пытается сгенерировать *.o файлы. Я действительно не совсем уверен, если это правильно, поэтому, если есть еще одна причина, почему это не работает, не стесняйтесь указать мне на нее.
Кроме того, если у вас есть предложения, как я мог бы сделать эту работу (с функцией files() или без нее, я не забочусь), я был бы очень благодарен.
Лучший ответ:
Недавно я узнал, что qmake автоматически расширяет простые выражения, такие как *.cpp, без необходимости каких-либо специальных функций глобирования.
Итак, я предлагаю изменить вашу строку SOURCES следующим образом:
SOURCES += someotherstuff.cpp SOURCES += ../Core/*.cpp SOURCES += ../Core/DriveProgramInterface/*.cpp SOURCES += ../Core/DriveProgramWizard/*.cpp Ответ №1
В некоторых случаях просто добавление: SOURCES += ../OtherDir/*.cpp не работает и работает сгенерированный Makefile жалуется, что:
No rule to make target ‘/../OtherDir/*.cpp’, needed by ‘release/*.o’ [or ‘debug/*.o’]
В таком случае решение состоит в том, чтобы обернуть $$qoute($$PWD/…) вокруг путей, которые имеют wild card *:
SOURCES += $$quote($$PWD/../OtherDir/*.cpp) HEADERS += $$quote($$PWD/../OtherDir/*.h)
Таким образом создается рабочий Makefile и сборка выполнена успешно.
Я думаю, что одним из случаев является добавление *.cpp/*.h к подпроекту, который вложен в суперпроект (т.е. проект с TEMPLATE=subdir в файле проекта .pro).
Это также может помочь, отметив, что я работаю на платформе Windows/MinGW32, и проблема может быть связана с этой платформой.