달력

12025  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

make 컴파일시 'Clock skew detected' 오류가 발생하는 경우가 있다.

보통 VMWARE를 사용할 때 자주발생하는 오류로 시스템 시간과 컴파일하고자 하는 소스파일의 시간이 맞지 않는 경우에 발생한다.

다시 말해 시스템 시간보다 소스파일의 시간이 더 앞일 경우에 주로 발생한다.

시스템 시간과 소스파일의 시간을 동기화 하면 해결 할 수 있다.


'karma( 업 ) > QT&QML Error' 카테고리의 다른 글

QString::toStdString() 오류  (412) 2018.06.20
VMPlayer에서 QT Creator사용시 발생할 수 있는 Error  (0) 2017.05.08
staticMetaObject error  (0) 2017.05.04
qmlRegisterType 등록 error  (0) 2017.05.02
Posted by 생짜
|

VMPlayer의 우분투 가상이미지에서 QT Creator를 설치하고 작업중이다.


SVN Repository는 Windows에 존재한다.

VMPlayer의 'Shared Folders' 기능을 이용하여 우분투 가상이미지에서 Windows의 SVN Repository를 공유를 한 후 QT Creator에서 Build를 실행하니 Error가 발생했다.


Build Error Message는 

'warning: Clock skew detected. Your build may be incomplete.' 

또는 

Build 폴더와 source 폴더가 같은 디렉토리에 있어야 한다는 Error 메시지이다.

그리고 문제를 해결하는데 결정적 단서가 된

Symbolic Link unsupport 라는 메시지가 있다.


QT Project 는 Lib를 만든 후 lib를 링크하여 사용하는 App을 빌드하는 Project이다.

리눅스의 Symbolic Link는 Windows에서 만들어지지 않는다. 그것도 모르고 windows의 공유폴더에서 계속 빌드를 하니 lib가 문제가 됐던 것이다.

Symbolic Link Lib가 안만들어지고 이 Lib가 안만들어지니 Lib를 사용하는 App에서 cann't find file 이라는 Error가 발생하며 build  실패가 됐던 것이다.


문제를 해결하기 위해 다음과 같이 조치했다.

windows 공유폴더에 있던 소스폴더를 우분투 가상이미지로 옮기 후 

QT Creator에서 Project Open, 

Project Open 후 Project setting 버튼(  ) 선택하여 Project Setting창을 연 후

Build 폴더의 path를 설정해 주면 문제를 해결 할 수 있다.

붉은색의 네모 박스에 있는 경로가 문제가 되었던 windows 공유폴더이다. 이 경로를 리눅스의 소스폴더가 있는 폴더로 변경해주면 문제가 해결된다.




'karma( 업 ) > QT&QML Error' 카테고리의 다른 글

QString::toStdString() 오류  (412) 2018.06.20
'Clock skew detected. Your build may be incomplete' Error  (0) 2017.05.08
staticMetaObject error  (0) 2017.05.04
qmlRegisterType 등록 error  (0) 2017.05.02
Posted by 생짜
|

.pro( Qt Project file )

QT Creator로 프로젝트를 생성하면 해당 프로젝트 명의 '.pro' 프로젝트 파일이 생성된다.  '.pro'  파일은 QT 프로젝트를 구성하는 파일이고 qmake 를 통해 자동적으로 Makefile을 만들 수 있다. 


.pri( Qt Project Include file )

.pri 파일은  .pro 파일의 형식과 완전히 동일하고 일반적으로 프로젝트 포함 파일이라고 한다. 기본적으로 기능을 공유하기 위해 프로그래밍 언어로 모듈을 포함하는 것과 유사하다. 공통적으로 필요한 환경을 .pri파일에 설정하고 .pro파일에 'include( .pri 파일 경로)' 또는 'include($$PWD/***.pri)' 해서 사용한다.


qmkae

유닉스/리눅스에서 컴파일 할 때 주로 Makefile을 사용하지만 Makefile 자체를 익히는데는 많은 시간이 필요하다.

Makefile을 쉽게 생성해주는 여러가지 툴들이 있는 qmake는 QT에서 주로 사용하는 다중 플랫폼용 Makefile 생성툴이다.

QT Project를 생성하면 '.pro' 파일이 생성되는데 '.pro'파일에 qmake 문법에 맞게 기술한 후 'Run qmake'를 실행하면

유닉스, 리눅스 용 Makefile이 생성된다. ( Run qmake는 QT Creator 에서 Popup 메뉴로 실행 시킬 수 있다. )

Qmake에 대한 자세한 사항은 qmake Manual , qmke Function Reference 을 참고하면 된다.

'.pro' 파일에 기술하는 qmake 문법은 유닉스/리눅스에서 사용하는 쉘스크립트 문법과 유사하다.

qmake에서 사용하는 시스템 변수에 값을 대입하면 된다.

주석은 '#'로 시작한다. '.pro' 또는 '.pri' 파일내에서 변수를 사용할 수 있는데 사용할 변수 앞에 '$$'를 붙여 주면 된다.

여러줄을 기술할 때는 '\'( 백슬러시 )를 사용하면 된다.


INCLUDERPATH = $$PWD \

                          ./lib

HEADERS = ../hdr
SOURCE = main.cpp \
               $$INCLUDERPATH

SOURCE += ../src


qmake의 시스템 변수

TEMPLATE

프로젝트 파일의 타입을 정의한다. app, vcapp, lib, vclib, subdirs 등이 올수 있다.

TEMPLATE = app : 독입적인 어플리케이션 (default값이다. 생략하면 app가 기본)

TEMPLATE = lib : static lib 또는 shared lib

TEMPLATE = subdirs : 내용은 없고 하위 디렉토리를 정의한다는 의미이다.

HEADERS 

해터파일을 적는다.

ex) HEADERS += animateditem.h

 

SOURCES

소스파일이다.

SOURCES += ledmeter.cpp main.cpp toplevel.cpp view.cpp

 

TARGET

실행파일의 이름이다. 보통 gcc 컴파일 시 –o 옵션 뒤에 붙는 이름이다.

생략 시 .pro 파일 앞에 붙는 이름이 default 값이 된다.

 

DEFINES

Define . gcc 컴파일 시 –D  옵션뒤에 붙는 옵션이다.

ex) DEFINES += HAVE_KEYBOARD

 

LIBS

프로젝트에 링크할 라이브러리를 지정한다.

라이브러리는 절래경로를 사용해 지정하거나 –L 옵션과 –l 과 같이 사용된다.

ex) LIBS += -lpng -L../../lib

 

INCLUDEPATH

전역 헤더 파일의 위치를 찾기위한 경로 지정. –I 옵션과 같은 역할

ex) INCLUDEPATH += ../shared

 

DESTDIR

실행 이미지가 설치될 디렉토리를 지정한다. 기본값은 플랫폼에 따라 다른데, 리눅스의 경우 현재 디렉토리에 실행파일이 생성되고, 윈도우에서는 debug나 release 디렉토리 아래 생성된다.

ex) DESTDIR = ../../../../bin

 

DEPENDPATH

QMAKE가 dependency 검색 시 사용되는 경로를 지정한다.

ex) DEPENDPATH = ../../include


MOC_DIR

moc 파일들이 생성되는 경로를 지정한다.

ex) MOC_DIR=$$OUT_PWD/.moc

 

SUBDIRS

하위 디렉토리에 있는 .pro 파일을 재귀적으로 호출될 수 있도록 하위 디렉토리를 지정한다.

ex) SUBDIRS += qtestlib designer

 

FORMS

uic에 의해 처리되는 QT디자이너로 생성된 .ui파일을 지정한다.

ex) FORMS += mainwindow.ui

 

RESOURCES

rcc에 의해 처리되는 실행파일내에 포함되는 리소스파일을 정의한 xml파일 .qrc를 지정한다.

ex) RESOURCES += assistant.qrc

 

VERSION

target 라이브러리의 버전 번호를 지정한다.

ex) VERSION=$${QT_MAJOR_VERSION}.$${QT_MINOR_VERSION}

 

DLLDESTDIR

dll파일이 설치될 경로를 지정한다. (디폴트값은 DESTDIR)

ex) DLLDESTDIR = $$OUTPUT_DIR/bin

 

QT

프로젝트에 사용될 Qt의 모듈을 지정한다.

디폴트값은 core 와 gui이다. 이는 QtCore 모듈과 QtGui 모듈을 포함한다는 의미이다.

QT에 지정되는 모듈은 대랴

core gui network opengl sql svg xml xmlpatterns qt3support 등이 있다.

Qt Creator에서 Qt모듈을 클릭하여 설정하는데 설정 시 .pro파일에 선택된 모듈들이 포함되는 것을 볼 수 있다.


CONFIG

CONFIG 변수는 빌드시 다양한 옵션들을 제어하기 위해 사용된다.

CONFIG += release warn_on qt 등의 형식으로 사용된다.

CONIFG와 사용되는 변수들

debug

 compile with debug options enabled

 release

 compile with optimization enabled, ignored if debug is specified

 warn_on

 The Compiler should emit more warnings than normally

 warn_off

 The Compiler should emit no warnings or as few as possible

 ordered

 Order subdirectories so parallelized builds work

 qt

 The target is a Qt application/library and requires Qt header file/library

 opengl

 The target require the OpenGL(or Mesa)

 thread

 The target is a multi threaded application or library

 x11

 The target is an X11 application or library

windows 

 The target is Win32 window application

 console

 The target is a Win32 console application

 shared

 The target is a shared object/DLL

 static

 The target is a static library

 plugin

 The target is a plugin(requires TARGET=lib, and implies shared)

 exceptions

 Turn on compiler exception support

 rtti

 Turns on compiler RTTI support

stl 

 Turns on Qt STL support

 flat

 only for TEMPLATE=vcapp; puts all sources files into one group and all header files into another group, independedt of the directory structure



 qmake의 내장함수

조건문

기본 문법은 아래와 같다.

condition {

    then-case

} else {

    else-case

}

{ 문은 반드시 condition 옆에 있어야 하고 }는 하나의 라인이어야 한다.

즉,

condition

{

then-case } 등으로 인식되지 않는다.

 

이제 사용예를 보자

win {

   debug {

      SOURCE += debug.cpp

   } else {

      SOURCE += release.cpp

   }

}

 

위 문장은 다음과 같이 사용할 수 있다.

condition:then-case

사용예

debug:SOURCE+=debug.cpp

else:SOURCE+=release.cpp

 

이경우 !(이 아닐경우)를 사용할 수 있다.

!debug:SOURCE+=release.cpp

 

isEmpty(variablename)

변수가 비었는지를 검사한다.

사용예

isEmpty(VERSION) {

   VERSION=4.3.0

}

 

CONFIG(config)

조건분과 유사하다. mutual exclusion을 사용할 수 있다.

사용예

CONFIG(release) {

   then-case

}




Posted by 생짜
|

C++ 클래스를 만든 후 QML Object Type으로 사용하기 위해서는 qmlregistertype 함수를 이용하여 QML Engine에 C++ 클래스를 등록해야 한다.


이 과정에서 qmlregistertype 함수의 내부에서 staticMetaObject error 가 발생했다.

나한테 발생한 staticMetaObject error는 lib로 만든 C++ 클래스를 QML App에서 불러오지 못해 발생한 error 였다.  .pro 파일을 수정하여 C++ 클래스 lib를 include할 수 있도록 해서 해결했다.


흔히 발생하는 staticMetaObject 에러는 QT 클래스를 상속받은 클래스에서 'Q_OBJECT' 키워드를 사용하지 않고 sginal / slot을 만들 경우에 발생한다고 한다.


즉 다시 말해 QT 클래스를 상속받은 모든 클래스는 의무적으로 'Q_OBJECT'를 사용해야 한다.

이건 규칙~~~~

Posted by 생짜
|

QT에서 QT 객체를 상속받아 Class구현할 때 아래와 같이 생성 에러가 날 때가 있다.

이 경우 상속 받은 QT 객체에서 꼭 구현해야 할 virtual 로 선언되어 있는 멤버 함수들을 정의하지 않아서 에러가 발생하는 것이다. 




예를 들어 QQuickPaintedItem 이란 QT 클래스를 상속 받은 자식 클래스에서


QQuickPaintedItem  클래스의 virtual 선언된 멤버함수들을 정의해주면 에러가 없어진다.




Posted by 생짜
|

RESOURCES:

Specifies the name of the resource collection files (qrc) for the target. 

QML인 경우 RESOURCES 폴더에 qml(.qrc) 파일이 존재해야 한다.


DISTFILES:

Specifies a list of files to be included in the dist target. This feature is supported by UnixMake specs only. 

dist 대상에 포한될 파일 목록을 지정한다. UnixMake 사양에서만 지원된다.


OTHER_FILES:

This seems in fact undocumented, at least I could not find anything. As far as I can tell all files listed here are only linked in project explorer (of Qt Creator for example) and are not treated in any way by qmake.

프로젝트의 일부이지만 "BUILD"가 아닌 파일들, readme, 빌드 힌트 또는 기타 내용과 같을 수 있다.

또는 '.pro' 파일 에서 'DISTFILES += ' 에 include하는 파일을 나타낼 수도 있다.


.pro 파일에 DISTFILES 가 존재


.pro 파일에 DISTFILES가 없을 경우




Posted by 생짜
|

주석처리

karma( 업 ) 2017. 3. 6. 23:32

출처 : dc 프로그래밍 갤러리

1. 한줄 주석 처리


1.1 한줄 주석 처리 


2. 여러줄 주석 처리


'karma( 업 )' 카테고리의 다른 글

개발자의 평생 공부  (0) 2017.06.19
what is JSON?  (0) 2017.05.23
language, platform( or SDK ), domain  (0) 2017.02.20
git stash  (0) 2017.02.17
fixing .gitignore  (0) 2017.02.17
Posted by 생짜
|
Posted by 생짜
|

MAC mini에 QT와 QT Creator를 성공적으로 설치했다.


이제 설치된 QT Creator을 입맛대로 바꾸기 위해 메뉴에서 

'Tools -> Option'을 선택해 'Environment'와 'Text Editor'를 꾸며보자

일단 'Text Editor'에서 D2Coding Font를 설정한다.


D2Coding Font Download 한 후 OS X의 '서체 관리자'를 사용하여 폰트를 설치한다.

D2Coding Font를 다운 받은 후 'Finder->응용프로그램->서체관리자'를 찾아 실행시킨 후 서체관리자를 통해 D2Coding 서체를 설치한다.


서체관리자를 실행 시킨 후 '+' 버튼을 클릭하여 '이름없는 모음' 폴더 생성, 이름을 'Coding'으로 만들었다. 'Coding' 을 선택 하 옆의 빈 공간에 오른쪽 마우스 클릭 '서체추가'를 선택 후 추가할 서체를 찾아 추가해주면 된다. 참고로 팝업 메뉴 중 '중복해결'을 선택하면 중복된 서체를 찾아 삭제해준다. 

서체관리자에서 서체를 추가 한 후에 재부팅을 해야지 추가된 서체가 인식된다.


재부팅을 한 후  QT Creator에서 추가된 서체를 폰트로 지정한다.

QT Creator를 실행 시킨 후( QT Creator는 Launchpad에 설치되는게 아니라 QT가 설치된 폴더에 있다. ) File menu의 'Tool->External->Configure' 를 선택 한다.


Font 설정 화면


interface 설정

이제 기본적인 환경 setting 은 끝났다. 

앞으로 본격적으로 QT, QML & JavaScript에 대해 공부를 하자.






Posted by 생짜
|

꿈에 그리던( 진짜 ? )   MAC OS X 에 QML 개발환경을 설치하기로 했다.


OS X  버전은 10.10.5 Yosemite 이다.


한동안  QML로 밥을 먹고 살것 같다.

회사에서는 Windows 에   VirtualBox 를 설치하고 Linux에서 개발하고 있다.


Linux, Windows 모두에  QML 개발 환경을 설치해 봤으니 집에 있는  MAC mini에도 QML 개발 환경을 설치한 후 매일매일 조금씩 보기로 결정했다.


보통 Linux같은 경우 QT 를 설치하고 QT Creator를 따로 설치했다. Windows의 경우 QT install 파일 하나만 설치하면 QT 와 QT Creator가 모두 설치됐다.


OS X도 Windows 처럼 install 프로그램 하나, 원클릭으로 모두 설치 할 수 있다. Windows도 OS X 도  Linux 보다는 설치가 편하다.


먼전 사이트에서 OS X 용 프로그램을 다운 받는다.


다운로드 사이트 URL은 http://download.qt.io/ 이다.





QT  다운로드 사이드에 접속 후 'development_release -> qt -> 5.8 -> 5.8.0-rc' 페이지에 접속( URL 클릭 시 이동 ) 후 qt-opensource-mac-x64-clang-5.8.0-rc_687.dmg 를 선택해 다운 받으면 된다. 


dmg 파일을 다운 후 실행 실행, Next 만 클릭해 주면 끝난다. 중간에 Register에 등록하는 화면이 나오는데 ID/Password를 만든 후 로그인 하면 된다.


설치시 설치 경로를 변경하지 않았다고 하면( 나처럼 무식하게 Next 만 선호 한다면 ) 아래 경로에  QT가 설치 되었을 것이다.




QT 를 설치하면 자동으로 Launchpad에 등록되지 않는다. 


install을 완료하고 QML로 'Hello QT' 프로그램을 작성하고 실행 시킨 화면이다.




이로써 간략하게 OS X 에 QML 개발환경을 설치해 봤다.


QML 개발 환경을 설치했으니 다음은 QT의 IDE Tool인 QT Creator 의 환경 설정에 대해 알아보자









Posted by 생짜
|