Ngoài Troubadour's comment, tôi sẽ lưu ý rằng mục tiêu SUBDIRS
chỉ tốt cho việc chỉ định thư mục con. Do đó, dòng thêm bạn
SOURCES += main.cpp
trong tập tin project.pro của bạn là không chính xác, và có khả năng sẽ thất bại trong việc xây dựng tập tin main.cpp của bạn, lúc tồi tệ nhất. Tốt nhất, qmake sẽ từ chối phân tích tệp, vì nó có thông số kỹ thuật xung đột trong đó.
Tôi đã sử dụng mẫu SUBDIRS
một vài lần và nó hoạt động tốt nếu bạn có thể xây dựng các bộ phận thành nhiều thư viện độc lập hơn hoặc ít hơn, dường như bạn có logic và gui riêng biệt. Dưới đây là một cách để làm điều này:
project_dir/
-project.pro
-common.pri
-logic/
----logic.pro
----some logic files
-gui/
----gui.pro
----gui files
-build/
----build.pro
----main.cpp
project.pro:
TEMPLATE = subdirs
SUBDIRS = logic \
gui
# build must be last:
CONFIG += ordered
SUBDIRS += build
chung.pri:
#Includes common configuration for all subdirectory .pro files.
INCLUDEPATH += . ..
WARNINGS += -Wall
TEMPLATE = lib
# The following keeps the generated files at least somewhat separate
# from the source files.
UI_DIR = uics
MOC_DIR = mocs
OBJECTS_DIR = objs
logic/logic.pro:
# Check if the config file exists
! include(../common.pri) {
error("Couldn't find the common.pri file!")
}
HEADERS += logic.h
SOURCES += logic.cpp
# By default, TARGET is the same as the directory, so it will make
# liblogic.a (in linux). Uncomment to override.
# TARGET = target
gui/gui.pro:
! include(../common.pri) {
error("Couldn't find the common.pri file!")
}
FORMS += gui.ui
HEADERS += gui.h
SOURCES += gui.cpp
# By default, TARGET is the same as the directory, so it will make
# libgui.a (in linux). Uncomment to override.
# TARGET = target
build/build.pro:
TEMPLATE = app
SOURCES += main.cpp
LIBS += -L../logic -L../gui -llogic -lgui
# Will build the final executable in the main project directory.
TARGET = ../project
Nguồn
2009-09-13 14:21:10
Điểm tốt về chỉ thị SOURCES trong project.pro. Tôi đã bỏ lỡ điều đó. – Troubadour
Cảm ơn câu trả lời toàn diện này. Đó là một điểm tốt để bắt đầu việc học của tôi. – zarzych
Đó là ấn tượng của tôi rằng "đặt hàng" là toàn cầu. Nó dường như không làm cho hai thư viện đầu tiên đồng thời. –