1
我已经用QT创建者创建了一个项目,并且我已经手动修改了qmakefile。问题在于,当我修改某些内容时,我需要两次构建项目,因为第一次有一些后链接复制问题。第一次编译输出称,在编译结束时(即成功结束):项目需要编译两次以复制文件
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
,而第二次是正确编译,我已经没有这个问题。
我的makefile就像下面
# 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
我认为复制问题,是因为这个部分,我复制给我的输出问题的文件中涉及到本节
# 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})
}
}
。所有目录都存在。那么我在哪里错了,我该如何纠正它,以便在第一个构建步骤中正确复制文件?
在此先感谢您的答复。
我刚刚做完了,但没有任何反应。编译器添加一个警告,告诉它不能创建目录,因为它已经存在。 mkdir:无法创建目录'../../../configuration/options.xml':存在文件 mkdir:无法创建目录'/usr/lib/awframework/Debug/libMyFramework.so':文件存在 mkdir:无法创建目录'/usr/lib/awframework/Debug/libMyFrameworkRoutines.so':文件存在 – Jepessen
看到我编辑的代码 – UmNyobe
它的工作原理,谢谢!对您的解决方案进行的唯一修改是编写'QMAKE_POST_LINK + = mkdir -p $$ {DESTINATION_PATH}'而不是'QMAKE_POST_LINK = mkdir -p $$ {DESTINATION_PATH}' – Jepessen