đây là tập tin .pro tôi:QtCreator nhiều nét build lỗi
QT += core gui widgets
TARGET = link_mult_def
TEMPLATE = app
SOURCES += main.cpp \
path2/file.cpp \
path1/file.cpp
HEADERS +=
Đối với một số lý do, QtCreator không tôn trọng cấu trúc thư mục nguồn khi xây dựng các tập tin .o từ các tập tin cpp. Cả hai tập tin sẽ được biên dịch thành "shadow_build_directory/file.o". Tôi mong đợi quá trình xây dựng để tạo các thư mục path1 và path2 trong thư mục shadow build và biên dịch "path1/file.cpp" thành "shadow_build_directory/path1/file.o" và "path2/file.cpp" thành "shadow_build_directory/path2/file.o ".
Vì các biểu tượng được biên dịch từ cả hai nguồn sẽ thêm vào tệp. Do đó, đây không phải là một vấn đề lớn. Nó trở thành một vấn đề lớn khi QtCreator cố gắng liên kết:
g++ -Wl,-O1 -o link_mult_def main.o file.o file.o -L/usr/lib/x86_64-linux-gnu -lQtCore -lpthread
liên kết QtCreator file.o hai lần mà làm cho mối liên kết thất bại với mutiple lỗi định nghĩa.
Làm cách nào để đảm bảo rằng QtCreator biên dịch để phản đối các tệp phản ánh cấu trúc thư mục nguồn?
Cảm ơn
EDIT:
path1/file.cpp
#include <iostream>
void function1()
{
std::cout << "function1" << std::endl;
}
path2/file.cpp
#include <iostream>
void function2()
{
std::cout << "function2" << std::endl;
}
quá trình xây dựng bởi QtCreator:
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../link_mult_def -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../link_mult_def -I. -o main.o ../link_mult_def/main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../link_mult_def -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../link_mult_def -I. -o file.o ../link_mult_def/path1/file.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../link_mult_def -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I../link_mult_def -I. -o file.o ../link_mult_def/path2/file.cpp
g++ -Wl,-O1 -o link_mult_def main.o file.o file.o -L/usr/lib/x86_64-linux-gnu -lQtGui -lQtCore -lpthread
file.o: In function `function2()':
file.cpp:(.text+0x0): multiple definition of `function2()'
make: Leaving directory `/home/schmid/code/misc/trash/link_mult_def-build-desktop-Qt_4_8_1_in_PATH__System__Release'
file.o:file.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status
make: *** [link_mult_def] Error 1
Thực ra đó là cách QtCreator sử dụng qmake. Tôi không nói gì với qmake cả. Tôi chỉ cần thêm các tệp nguồn vào dự án của mình. Tôi cần tất cả các tệp để xây dựng tệp thực thi của mình. Nhưng khi tôi xây dựng dự án nó thất bại. – HenrySpencer
tôi khá chắc chắn rằng mã nguồn là tốt. Đó là một vấn đề với QtCreator. Vì bạn có thể thấy cả hai tệp nguồn được biên dịch thành cùng một tệp đối tượng xuất hiện hai lần trong lời gọi trình liên kết. Dẫn đến lỗi định nghĩa mutliple. Tôi không biết làm thế nào để nói với QtCreator để biên dịch để tách các tập tin đối tượng. – HenrySpencer
Xin lỗi về điều đó, tôi đã không nhìn thấy bạn sử dụng cùng một tên tập tin trong các thư mục con ... xin lỗi vì tiếng ồn. – Mat