Ошибка «нет правила для цели ...» с функцией недокументированных файлов (glob) - PullRequest
2 голосов
/ 27 февраля 2012

У меня есть один проект, в который включены все мои файлы .h и .cpp.Этот проект строит мое приложение.В другом проекте есть все мои модульные тесты, которые требуют те же файлы .h и .cpp, что и первый проект.Поэтому каждый раз, когда я добавляю новый файл в свой первый проект, я должен добавлять его и ко второму проекту, поэтому я пытался автоматизировать этот шаг.
Для этого я пытался использовать функцию files (glob) qmake,который выглядит в основном так:

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(..\Core\DriveProgramInterface\*.cpp) \
        files(..\Core\DriveProgramWizard\*.cpp) \

  OBJECTS       = \
        someotherstuff.cpp \
        debug/*.o \
        debug/*.o \
        debug/*.o \

Итак, я думаю, может быть, проблема в том, что глобус не решенв MakeFile, но вместо этого он пытается создать файлы * .o.Я действительно не совсем уверен, если это правильно, так что, если есть какая-то другая причина, почему это не работает, не стесняйтесь указывать мне на это.
Кроме того, если у вас есть какие-либо предложениякак бы я мог сделать эту работу (с функцией files () или без, мне все равно), я был бы очень признателен.

Ответы [ 2 ]

3 голосов
/ 27 февраля 2012

Недавно я обнаружил, что qmake автоматически расширяет простые выражения, такие как * .cpp, без необходимости каких-либо специальных функций.

Поэтому я бы предложил изменить строку SOURCES на эту:

SOURCES += someotherstuff.cpp
SOURCES += ../Core/*.cpp
SOURCES += ../Core/DriveProgramInterface/*.cpp
SOURCES += ../Core/DriveProgramWizard/*.cpp
0 голосов
/ 12 декабря 2017

В некоторых случаях просто добавление: SOURCES += ../OtherDir/*.cpp не работает, и запуск созданного Makefile жалуется, что:

No rule to make target '/../OtherDir/*.cpp', needed by 'release/*.o' [or 'debug/*.o']

В таком случае решение состоит в том, чтобы обернуть $$qoute($$PWD/...) вокруг путей, которыеиметь подстановочный знак *:

SOURCES += $$quote($$PWD/../OtherDir/*.cpp)
HEADERS += $$quote($$PWD/../OtherDir/*.h)

Таким образом, создается рабочий Makefile и сборка успешна.

Я думаю, что один из случаев - это когда *.cpp/*.h добавляется к подпроект , который вложен в суперпроект (т.е. проект с TEMPLATE=subdir в его файле .pro проекта).

Это также может помочь, упомянув, что я работаю над Windows/MinGW32 платформа и проблема может быть связана с этой платформой.

...