2016-09-27 4 views
1

#define을 라이브러리에서 주 응용 프로그램으로 전달해야합니다. 필자가 이해하는 한 .prl 파일을 사용하여이를 수행 할 수 있습니다. 나는 간단한 하위 디렉토리를 테스트하는 프로젝트를 만들었습니다QMake는 정적 라이브러리의 .prl 파일을 어떻게 처리합니까?

이것은 주요 프로젝트 파일 :

QT  -= gui 

TARGET = lib 
TEMPLATE = lib 
# Added create_prl option 
CONFIG += staticlib create_prl 
# This is the define I want to pass to main application 
PRL_EXPORT_DEFINES += TEST_PRL_DEFINE 

SOURCES += lib.cpp 

HEADERS += lib.h 

이것은 기본 응용 프로그램 파일 :

TEMPLATE = subdirs 

SUBDIRS += \ 
    app \ 
    lib 

app.depends = lib 

이 라이브러리 프로젝트 파일입니다

QT += core 
QT -= gui 

CONFIG += c++11 

TARGET = app 
# Added link_prl option 
CONFIG += console link_prl 
CONFIG -= app_bundle 

TEMPLATE = app 

SOURCES += main.cpp 

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

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

win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/release/liblib.a 
else:win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/debug/liblib.a 
else:win32:!win32-g++:CONFIG(release, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/release/lib.lib 
else:win32:!win32-g++:CONFIG(debug, debug|release): PRE_TARGETDEPS += $$OUT_PWD/../lib/debug/lib.lib 
else:unix: PRE_TARGETDEPS += $$OUT_PWD/../lib/liblib.a 

그러나 Qt Creator에서 프로젝트를 빌드 할 때 # 정의는 표준을 제외한 주요 응용 프로그램에 전달 될 것 같다

cd lib\ && (if not exist Makefile C:\Qt\5.4\mingw491_32\bin\qmake.exe C:\Qt\projects\test_prl\lib\lib.pro -spec win32-g++ CONFIG+=debug CONFIG+=qml_debug -o Makefile) && C:/Qt/Tools/mingw491_32/bin/mingw32-make -f Makefile 
mingw32-make[1]: Entering directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/lib' 
C:/Qt/Tools/mingw491_32/bin/mingw32-make -f Makefile.Debug 
mingw32-make[2]: Entering directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/lib' 
# Here you can see that TEST_PRL_DEFINE is added to defines of library project 
g++ -c -pipe -fno-keep-inline-dllexport -g -frtti -Wall -Wextra -fexceptions -mthreads -DTEST_PRL_DEFINE -DUNICODE -DQT_QML_DEBUG -DQT_CORE_LIB -I"..\..\test_prl\lib" -I"." -I"..\..\..\5.4\mingw491_32\include" -I"..\..\..\5.4\mingw491_32\include\QtCore" -I"debug" -I"..\..\..\5.4\mingw491_32\mkspecs\win32-g++" -o debug\lib.o ..\..\test_prl\lib\lib.cpp 
ar -ru debug\liblib.a debug/lib.o 
ar: creating debug\liblib.a 
mingw32-make[2]: Leaving directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/lib' 
mingw32-make[1]: Leaving directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/lib' 
cd app\ && (if not exist Makefile C:\Qt\5.4\mingw491_32\bin\qmake.exe C:\Qt\projects\test_prl\app\app.pro -spec win32-g++ CONFIG+=debug CONFIG+=qml_debug -o Makefile) && C:/Qt/Tools/mingw491_32/bin/mingw32-make -f Makefile 
mingw32-make[1]: Entering directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/app' 
C:/Qt/Tools/mingw491_32/bin/mingw32-make -f Makefile.Debug 
mingw32-make[2]: Entering directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/app' 
# Here no TEST_PRL_DEFINE is added to #defines of main application project 
g++ -c -pipe -fno-keep-inline-dllexport -g -std=c++0x -frtti -Wall -Wextra -fexceptions -mthreads -DUNICODE -DQT_QML_DEBUG -DQT_CORE_LIB -I"..\..\test_prl\app" -I"." -I"..\..\test_prl\lib" -I"..\..\..\5.4\mingw491_32\include" -I"..\..\..\5.4\mingw491_32\include\QtCore" -I"debug" -I"..\..\..\5.4\mingw491_32\mkspecs\win32-g++" -o debug\main.o ..\..\test_prl\app\main.cpp 
g++ -Wl,-subsystem,console -mthreads -o debug\app.exe debug/main.o -LC:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/app/../lib/debug/ -llib -LC:/Qt/5.4/mingw491_32/lib -lQt5Cored 
mingw32-make[2]: Leaving directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/app' 
mingw32-make[1]: Leaving directory 'C:/Qt/projects/build-test_prl-Desktop_Qt_5_4_2_MinGW_32bit-Debug/app' 

그러나 lib.prl 파일이 빌드 과정에서 생성되어 liblib.a 옆에 배치.

create_prl/link_prl 옵션은 어떻게 사용해야합니까?

답변

-2

더 나은 메이크 파일을 스스로 작성하는 것이 좋습니다. 전체 qmake 작업은 어떤 희망보다 훨씬 뛰어납니다.

지금 당장은 silent가 -L/usr/lib와 같은 완전히 깨진 링커 옵션을 추가하는 이유를 찾아야합니다. 그들은 .prl 파일에 나타나지만 어디서 왔는지는 알 수 없습니다. 그들은 결코 pkg-config 맨 페이지를 읽지 못해 냄새를 맡습니다.

+0

질문 작성자가'qmake'를 사용하기 때문에 귀하의 대답은 문제의 범위를 벗어납니다. – eyllanesc