2016-10-15 11 views
0

私はsubdirプロジェクト構造でqtcreatorを使用しています。その場合は: 私は2つのプロジェクトを持っています。 AとBのプロジェクトをコンパイルした後にB、しかしBでは、Aのクラス(クラス、関数など)を使用する必要があります。私はwikiでdependsとsubdirプロジェクトの設定を見つけましたが、プロジェクトAのクラスAをプロジェクトBのクラスBに含めると(これらの名前はconvininece用です)、私には未定義の参照が与えられます。ここで(それぞれおよびサブプロジェクト)メインプロジェクトから私の.PROファイルは次のとおりです。qtcreatorプロジェクトファイルdepndanciesとビルドの順序

#base pro file 
TEMPLATE = subdirs 

SUBDIRS += \ 
    message \ 
    daemon \ 
    receiver 


daemon.subdir = daemon 
message.subdir = message 
daemon.depends = message 

サブプロジェクトA:

TEMPLATE = app 
CONFIG += console c++11 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += main.cpp \ 
    daemon.cpp \ 
    logwriter.cpp 

HEADERS += \ 
    daemon.h \ 
    logwriter.h \ 
    defs.h 

LIBS += -lpthread 

サブプロジェクトB:

TEMPLATE = app 
CONFIG += console c++11 
CONFIG -= app_bundle 
CONFIG -= qt 

SOURCES += \ 
    message.cpp \ 
    main.cpp 

HEADERS += \ 
    message.h 

だから私はにプロジェクトBクラスを必要としますプロジェクトAを開始し、さらにプロジェクトを延長します。よろしくです。 よろしくお願いします。 EDIT:私は図書館(-lclssA)

答えて

1

「未定義の参照」であることを、プロジェクトAを設定するつもりだ場合の.priの例では、認識されるであろう一般的にヘッダ、問題がないにリンクされている問題があります。プロジェクトAを使用する必要がある場合は、プロジェクトAとBをリンクする必要があります。中 例えば:

LIBS += ../path/to/libB.so 
+0

プロジェクトBから.cppファイルを個別にビルドすると、ビルドされます。私のプロジェクトはlibsではありません。私はlibとして依存プロジェクトを構築する必要がありますか?私はそれをしたいとは思っていません。だから私はqtcreatorプロジェクトがこれを行うことができるかどうかを知りたい。 –

+0

しかしあなたは正しいです.so libは動作しますが、回避策が見つからない場合は、libにしましょう... –

0

最も簡単な方法は、LIBとしてそれを含めることで、最も簡単な方法は、dependee上の右クリックし、「ライブラリを追加」、qtcreatorからだった - >「ビルドツリーから既存のライブラリー」。これは、.proで次のように生成されます:

win32:CONFIG(release, debug|release): LIBS += -L$$OUT_PWD/../message/release/ -lmessage 
else:win32:CONFIG(debug, debug|release): LIBS += -L$$OUT_PWD/../message/debug/ -lmessage 
else:unix: LIBS += -L$$OUT_PWD/../message/ -lmessage 

INCLUDEPATH += $$PWD/../message 
DEPENDPATH += $$PWD/../message 

しかし、私はそのクラスの私のメッセージクラスのテストを行う能力を失っています。だから、より良い方法があれば、それを受け入れるだろう。