2015-03-20 5 views
2

Источник qt содержит несколько примеров. После загрузки из Интернета я перехожу к примерам/рисую/концентрическим кругам и запускаю «qmake», и он генерирует Makefile (который устанавливает CC = gcc) из файла .pro, и после make, я могу запустить программу demo programriccircles на моей машине CentOS. (работает код x86).Как qmake определяет компилятор для использования в Makefile?

Теперь у меня есть проект, выполняющий Qt на sparc-машине, работающей под ОС, и у меня уже есть построение дерева. Если я перемещаю весь каталог концентрических кругов где-то в дереве сборки, когда я запускаю «qmake», сгенерированный Makefile устанавливает CC = sparc-xxx-gcc вместо простого gcc (который для хоста x86). Фактически, не перемещая каталог, если я запустил qmake из дерева сборки sparc, он делает Makefile для sparc. (независимо от файла .pro)

Как qmake знает, что я строю qt-программу для sparc-машины только из того места, где я запускаю qmake? Ниже представлен файл concentriccircles.pro.

HEADERS  = circlewidget.h \ 
       window.h 
SOURCES  = circlewidget.cpp \ 
       main.cpp \ 
       window.cpp 

# install 
target.path = $$[QT_INSTALL_EXAMPLES]/painting/concentriccircles 
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS concentriccircles.pro 
sources.path = $$[QT_INSTALL_EXAMPLES]/painting/concentriccircles 
INSTALLS += target sources 

symbian { 
    TARGET.UID3 = 0xA000A64A 
    include($$QT_SOURCE_TREE/examples/symbianpkgrules.pri) 
} 
maemo5: include($$QT_SOURCE_TREE/examples/maemo5pkgrules.pri) 
+1

указан компилятор при настройке сборки-среде. Компилятор не читается из спецификации проекта. –

ответ

5

Прежде всего вам нужно знать, какой spec qmake используется по умолчанию. Вы можете проверить это, выполнив

qmake -query QMAKE_MKSPECS 

Результат должен быть путь, содержащий все mkspecs т.е.

/usr/share/qt4/mkspecs 

Теперь вы можете проверить по умолчанию mkspec:

ls -lah /usr/share/qt4/mkspecs/default 

Результат (для моей конфигурации)

/usr/share/qt4/mkspecs/default -> linux-g++-64 

Итак, ясно видно, что у меня есть по умолчанию Linux-г ++ - 64 mkspec

Теперь давайте посмотрим, что внутри спецификации:

cat /usr/share/qt4/mkspecs/default/qmake.conf 

Результат:

# 
# qmake configuration for linux-g++ 
# 
# Written for GNU/Linux platforms that have both lib and lib64 directories, 
# like the AMD Opteron. 
# 

MAKEFILE_GENERATOR = UNIX 
TARGET_PLATFORM  = unix 
TEMPLATE  = app 
CONFIG   += qt warn_on release incremental link_prl gdb_dwarf_index 
QT   += core gui 
QMAKE_INCREMENTAL_STYLE = sublib 

QMAKE_CFLAGS  = -m64 
QMAKE_LFLAGS  = -m64 

include(../common/linux.conf) 
include(../common/gcc-base-unix.conf) 
include(../common/g++-unix.conf) 


QMAKE_LIBDIR_X11  = /usr/X11R6/lib64 
QMAKE_LIBDIR_OPENGL = /usr/X11R6/lib64 

load(qt_config) 

Как вы можете видеть это содержит некоторые другие .conf-файлы. В моей конфигурации г ++ - unix.conf включает в себя просто г ++ - base.conf, так что я перейду прямо к нему:

cat /usr/share/qt4/mkspecs/common/g++-base.conf 

Результат:

# 
# Qmake configuration for the GNU C++ compiler 
# 
# Before making changes to this file, please read the comment in 
# gcc-base.conf, to make sure the change goes in the right place. 
# 
# To verify that your change has the desired effect on the final configuration 
# you can use the manual test in tests/manual/mkspecs. 
# 

QMAKE_CC = gcc 

QMAKE_LINK_C  = $$QMAKE_CC 
QMAKE_LINK_C_SHLIB = $$QMAKE_CC 

QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO += -O2 -g 

QMAKE_CXX = g++ 

QMAKE_LINK  = $$QMAKE_CXX 
QMAKE_LINK_SHLIB = $$QMAKE_CXX 

QMAKE_CXXFLAGS_RELEASE_WITH_DEBUGINFO += $$QMAKE_CFLAGS_RELEASE_WITH_DEBUGINFO 

QMAKE_PCH_OUTPUT_EXT = .gch 

QMAKE_CFLAGS_PRECOMPILE  = -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} 
QMAKE_CFLAGS_USE_PRECOMPILE = -include ${QMAKE_PCH_OUTPUT_BASE} 
QMAKE_CXXFLAGS_PRECOMPILE  = -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} 
QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE 

Как вы можете видеть, компилятор строго определяется Выбирается qmake spec файл. Вы можете использовать другой файл спецификации по телефону

qmake -spec SPEC_NAME 

SPEC_NAME должна быть именем каталога внутри qmake -query QMAKE_MKSPECS

+0

не работает на qt5 –

+0

Я не сказал, что он работает на Qt5 - на Qt5 нет QMAKE_MKSPECS, однако каталог mkspecs все еще присутствует (может быть в другом пути) - выбор «build env» для qmake по-прежнему выполняется qmake - переключатель спецификации –

Смежные вопросы