qmake 의 CONFIG 와 QT 의 잡담

전송: http://hi.baidu.com/cyclone/blog/item/d299af511bed309f8c5430c3.html
 
먼저 예 를 들 어 보 자.
#include <QtCore/QCoreApplication>
#include <QtCore/QDebug>
int main(int argc, char** argv)
{
    QCoreApplication app(argc, argv);
    qDebug()<<"hello qt!";
    app.exec();
}

어떻게 이 프로그램 을 컴 파일 합 니까?우 리 는 C + + 프로그램 을 구축 하 는 것 을 알 고 있 습 니 다. 컴 파일 (컴 파일 예비 처리 포함), 링크 등 몇 단계 가 아 닙 니 다.
  • 컴 파일 할 때, 우 리 는 프로세서 가 우리 의 헤더 파일 (즉, 헤더 파일 경 로 를 지정)
  • 을 찾 을 수 있 도록 해 야 한다.
  • 링크 를 할 때, 우 리 는 링크 기 가 우리 가 필요 로 하 는 라 이브 러 리 를 찾 을 수 있 도록 해 야 한다
  • 이 프로그램 에 대해 말하자면, 즉 지정 이다
    헤더 파일 경로
    $QTDIR/include
    라 이브 러 리 파일
    QtCore4. lib (또는 그 에 상응하는 다른 형식)
    답 은 간단 합 니 다.
    g++ main.cpp -Ie:\Qt\4.7.0\include -o main -Le:\Qt\4.7.0\lib -lQtCore4

    혹시
    cl main.cpp -ID:/Qt/4.7.0/include -Femain  -link -LIBPATH:D:/Qt/4.7.0/lib QtCore4.lib

    매개 변수의 의 미 는 참고 할 수 있다. C + + 에서 Qt 까지
    헤더 라 이브 러 리 파일
    C + + 에서 제3자 라 이브 러 리 를 사용 하 는 과정 은 헤더 파일, 링크 라 이브 러 리 파일 을 포함 하 는 과정 임 을 알 고 있 습 니 다.
    QString 사용 하기
    필요 - lQtCore 4
    QWidget 사용 하기
    필요 - lQtGui 4
    QFtp 사용 하기
    필요 - lQtNetWork 4
    QWebView 사용
    - lQtWebKit 4 필요
    ...
    ...
    다음은 Qt 의 헤더 파일 과 라 이브 러 리 파일 을 간단하게 살 펴 본 다음 에 qmake 가 어떻게 처리 하 는 지 살 펴 보 겠 습 니 다. 왜 우 리 는. pro 파일 에서 이 헤더 파일 경로 와 라 이브 러 리 파일 Qt 헤더 파일 을 지정 하지 않 아 도 됩 니까?
  • #include
  • #include
  • #include
  • #include

  • 그러나 우 리 는 모두 C, C + + 를 배 웠 고 뾰족 한 괄호 나 작은 따옴표 안에 머리 파일 의 파일 이름 이 있다 는 것 을 알 고 있다.그래서 이해 하기 어렵 지 않 을 것 입 니 다. 아래 의 몇 개의 파일 만 돌아 다 니 는 것 이 아 닙 니 다.
  • $QTDIR/include/QtCore/QString
  • $QTDIR/include/QtCore/qstring.h

  • 그래서?그대
    헤더 파일 사용
    헤더 파일 경 로 를 지정 해 야 합 니 다.
    #include
    $QTDIR/include/QtCore
    #include
    $QTDIR/include
    어떤 사람들 은 \ # include < QtCore > 라 는 쓰 기 를 좋아 하 는데, 이것 은 헤더 파일 이 어디 에 있 습 니까?그것 의 전체 경 로 는
    $QTDIR/include/QtCore/QtCore
    이와 유사 하 다.
    헤더 파일 사용
    헤더 파일 경 로 를 지정 해 야 합 니 다.
    #include
    $QTDIR/include/QtCore
    #include
    $QTDIR/include/QtGui
    #include
    $QTDIR/include/QtScript
    ...
    ...
    잘 모 르 겠 어 요. 눈치 채 셨 어 요?하면, 만약, 만약... #include 이 방법 은 헤더 파일 경로 만 필요 합 니 다. 이것 이 바로 $QTDIR / include Qt 라 이브 러 리 파일 과 헤더 파일 에 비해 라 이브 러 리 파일 이 간단 한 것 같 습 니 다.바로 아래 경로 에 있 으 니까.
  • $QTDIR/lib

  • 경로 가 간단 한데 라 이브 러 리 는 요?
  • 동적 라 이브 러 리 (공유 라 이브 러 리), 정적 라 이브 러 리 (압축 파일 라 이브 러 리)
  • 서로 다른 플랫폼 아래 에 서로 다른 접미사 가 있다.dll, .so, .dylib, .lib, .a
  • 디 버 깅 정보 가 있 고 디 버 깅 정보 가 없 는 라 이브 러 리
  • windows 의 동적 라 이브 러 리 는 안내 라 이브 러 리
  • 가 필요 합 니 다.
    windows 에서 MSVC 로 컴 파일 된 Qt4 를 예 로 들 면:
  • 정적 컴 파일
  • $QTDIR/lib/QtCore.lib
  • $QTDIR/lib/QtCored.lib

  • 동적 컴 파일
  • $QTDIR/lib/QtCore4.lib
  • $QTDIR/lib/QtCore4.dll
  • $QTDIR/lib/QtCored4.lib
  • $QTDIR/lib/QtCored4.dll


  • qmake 는 qmake 로 우리 앞의 예 를 관리 하려 면 간단 한. pro 파일
    CONFIG += console
    QT -= gui
    SOURCES += main.cpp
    만 써 야 합 니 다. 그러면 qmake 는 어떤 헤더 파일 과 라 이브 러 리 파일 이 필요 한 지 어떻게 알 수 있 습 니까?사실 여기 서 두 줄 의 코드 (기본 값 이기 때문에 쓰 지 않 아 도 되 지만 우리 가 이 예 를 이해 하 는 데 중요 하 다)
    CONFIG += qt 
    QT += core
    를 생략 했 습 니 다. 그러면 이 물건 들 은 어떻게 앞의 물건 과 연결 합 니까?우선
    CONFIG += qt
    최종 포함:

  • 헤더 파일 경로
    $QTDIR/include
    라 이브 러 리 파일 경로
    $QTDIR/lib

  • 그 다음
    QT += core
    은 Qt 와 관련 된 경 로 를 더욱 세분 화 할 것 이다.

  • 헤더 파일 경로 중
    $QTDIR/include/QtCore
    필요 한 라 이브 러 리 연결
    QtCore4.lib
    미리 처 리 된 매크로 를 컴 파일 합 니 다.
    QT_CORE_LIB

  • 보 세 요. 현재 헤더 파일 경로 와 라 이브 러 리 파일 이 있 습 니 다. 그리고 헤더 파일 을 QString 으로 쓰 든!QtCore / QString 모두 찾 을 수 있 습 니 다.다시. pro 파일 에 있 기 때문에
  • CONFIG 에는 기본적으로 qt
  • 가 포함 되 어 있 습 니 다.
  • QT 에는 기본적으로 core
  • 가 포함 되 어 있 습 니 다.
    이것 은 이 점 을 더욱 숨 기 게 한다. 예 를 들 어 우리 가 프로그램 에서
    #include <QFtp>
    ...
    QFtp xxx;
    ...
    을 사용 했다 면 우 리 는 필요 할 것 이다.

  • 헤더 파일 경로 지정
    $QTDIR/include/QtNetwork
    연결 할 라 이브 러 리 지정
    QtNetWork4.lib

  • 이 두 가 지 는 바로 아래 의 문구 가 한 것 이다.
    QT += network
  • 이 외 에 도 매크로 QT 를 정의 합 니 다.NETWORK_LIB

  • 하하 하, 다음 문제 의 답 을 발 견 했 나?
  • QT + = network 라 는 문 구 를 잊 어 버 렸 습 니 다. 왜 어떤 사람 은 컴 파일 오 류 를 만 났 고 어떤 사람 은 링크 오 류 를 만 났 습 니까?

  • 헤더 파일 경로 가 없 기 때문에 컴 파일 할 때 헤더 파일 을 찾 을 수 없습니다.(단, QtNetWork / QFtp 라 고 쓰 면 문제 가 되 지 않 습 니 다.)
  • 링크 라 이브 러 리 가 지정 되 지 않 았 기 때문에 헤더 파일 을 찾 아 도 링크 에 문제 가 생 길 수 밖 에 없다.(답 이 뻔 하 죠)
  • 모듈 을 사용 할 때 모듈 을 사용 하 는 방법
  • CONFIG 변 수 를 수정 하거나
  • 또는 QT 변수 세분 화
  • 어떤 모듈 은 둘 다 가능 하 다.

  • QT 를 수정 하 는 것 은 가장 일반적인 것 입 니 다. QtCore, QtGui, QtNetWork 등 입 니 다.

  • 코어 모듈 사용
    QT += core
    Gui 모듈 사용
    QT += gui
    NetWork 모듈 사용
    QT+=network

  • CONFIG 를 수정 합 니 다. 예 를 들 어 QAx Container 모듈
    CONFIG += qaxcontainer
    두 가 지 는 모두 QtTest 모듈 과 같 습 니 다. 우 리 는
    CONFIG += qtestlib
    을 사용 할 수도 있 고
    QT += testlib
    두 가 지 를 사용 할 수도 있 습 니 다. 두 가 지 는 후자 가 QT 를 정의 할 것 입 니 다.TESTLIB_LIB 이렇게 매크로 (QT + = core gui 등 효과 와 같 음) 전 자 는 이 매크로 를 정의 하지 않 습 니 다.
     

    좋은 웹페이지 즐겨찾기