J'ai créé un projet avec QT creator et j'ai modifié manuellement le fichier qmakefile. Le problème est que, quand je modifie quelque chose, j'ai besoin de construire le projet deux fois parce que la première fois que j'ai un problème de copie post-lien. La première fois que la sortie de la compilation dit, à la fin de la compilation (qui se termine avec succès):Le projet doit être compilé deux fois pour copier les fichiers
cp ../../../configuration/options.xml ../../../bin cp /usr/lib/MyFramework/Debug/libMyFramework.so ../../../bin cp /usr/lib/MyFramework/Debug/libMyFrameworkRoutines.so ../../../bin
cp: omitting directory `../../../bin'
cp: cannot stat `cp': No such file or directory
cp: omitting directory `../../../bin'
cp: cannot stat `cp': No such file or directory
alors que la deuxième fois, il compile correctement et je ne l'ai pas ce problème.
Mon makefile est comme ce qui suit
# Variables used in the project
SOURCES_PATH = $$quote(../../../src/UpdateManager/sources)
HEADERS_PATH = $$quote(../../../src/UpdateManager/headers)
DESTINATION_PATH = $$quote(../../../bin)
# Project configuration
QT -= gui
TARGET = UpdateManager
TEMPLATE = lib
DEFINES += UPDATEMANAGER_LIBRARY
# Copying to destination folder
DESTDIR = $$DESTINATION_PATH
# Headers paths used in the project
INCLUDEPATH += $$HEADERS_PATH
# Source files
SOURCES += \
../../../src/UpdateManager/sources/options.cpp \
../../../src/UpdateManager/sources/consolelog.cpp \
../../../src/UpdateManager/sources/updatemanager.cpp
HEADERS += \
../../../src/UpdateManager/headers/options.h \
../../../src/UpdateManager/headers/consolelog.h \
../../../src/UpdateManager/headers/updatemanager.h
OTHER_FILES += \
../../../configuration/options.xml
unix:!symbian {
maemo5 {
target.path = /opt/usr/lib
} else {
target.path = /usr/lib
}
INSTALLS += target
}
### EXTERNAL LIBRARIES ###
# my framework
MY_FRAMEWORK_HEADERS_PATH = $$quote(/usr/include/MyFramerork/)
MY_FRAMEWORK_LIBRARY_PATH = $$quote(/usr/lib/MyFramerork)
MY_FRAMEWORK_ROUTINES_HEADERS_PATH = $$quote(/usr/include/MyFramerork/routines)
INCLUDEPATH += $$MY_FRAMEWORK_HEADERS_PATH
INCLUDEPATH += $$MY_FRAMEWORK_ROUTINES_HEADERS_PATH
LIBS += -L$$MY_FRAMEWORK_LIBRARY_PATH/Debug/ -lMyFramework
LIBS += -L$$MY_FRAMEWORK_LIBRARY_PATH/Debug/ -lMyFrameworkRoutines
# Copying needed files in out directory
unix{
EXTERNAL_FILES += \
../../../configuration/options.xml \
$$MY_FRAMEWORK_LIBRARY_PATH/Debug/libMyFramework.so \
$$MY_FRAMEWORK_LIBRARY_PATH/Debug/libMyFrameworkRoutines.so
for(FILE,EXTERNAL_FILES){
QMAKE_POST_LINK += $$quote(cp $${FILE} $${DESTDIR})
}
}
# Boost
LIBS += -lboost_thread
Je pense que le problème de la copie est liée à cette section
# Copying needed files in out directory
unix{
EXTERNAL_FILES += \
../../../configuration/options.xml \
$$MY_FRAMEWORK_LIBRARY_PATH/Debug/libMyFramework.so \
$$MY_FRAMEWORK_LIBRARY_PATH/Debug/libMyFrameworkRoutines.so
for(FILE,EXTERNAL_FILES){
QMAKE_POST_LINK += $$quote(cp $${FILE} $${DESTDIR})
}
}
Parce que dans cette section, je copier des fichiers qui me donnent problème dans la sortie. Tout le répertoire existe. Alors, où ai-je tort et comment puis-je le corriger afin que les fichiers soient copiés correctement dans la première étape de construction?
Merci d'avance pour vos réponses.
Je viens de le faire, mais rien ne se passe. Le compilateur ajoute un avertissement indiquant qu'il ne peut pas créer de répertoire car il existe déjà. mkdir: impossible de créer le répertoire '../../../configuration/options.xml ': le fichier existe mkdir: impossible de créer le répertoire' /usr/lib/awframework/Debug/libMyFramework.so': le fichier existe mkdir: impossible de créer le répertoire '/usr/lib/awframework/Debug/libMyFrameworkRoutines.so ': Le fichier existe – Jepessen
voir mon code édité – UmNyobe
Cela fonctionne, merci! La seule modification apportée à votre solution consistait à écrire 'QMAKE_POST_LINK + = mkdir -p $$ {DESTINATION_PATH}' au lieu de 'QMAKE_POST_LINK = mkdir -p $$ {DESTINATION_PATH}' – Jepessen