개요
Qt를 기반 프로젝트의 진행을 위한 개발환경 구축 과정을 정리하였습니다.
환경설정 (설치)
참고 : Ubuntu 20.04에서 진행하였습니다.
Qt5
다음 명령을 이용하여 간단히 설치할 수 있습니다.
$ sudo apt-get update
$ sudo apt-get install build-essential
$ sudo apt-get install qt5-default
$ sudo apt-get install qtcreator
# 문서 및 예제 설치
$ sudo apt-get install qt5-doc
$ sudo apt-get install qt5-doc-html qtbase5-doc-html
$ sudo apt-get install qtbase5-example
$ qmake --version # 설치 확인
QMake version 3.1
Using Qt version 5.12.8 in /usr/lib/x86_64-linux-gnu
Qt4
기존 legacy 프로젝트를 빌드 및 시험하기 위해 Qt4 도 설치하였습니다.
$ sudo add-apt-repository ppa:rock-core/qt4
$ sudo apt update
$ sudo apt install libqt4-declarative qt4-dev-tools qt4-qmake libqtwebkit4
$ sudo apt install qt4-default
$ qmake-qt4 --version
make 파일 생성
$ qmake-qt4
QMake version 2.01a
Using Qt verson 4.8.7 in /usr/lib/x86_64-linux-gnu
※ update-alternative
를 사용하여 필요에 따라 버전을 선택할 수 있도록 설정하도록 합니다.
Google Test
$ sudo apt update -y
$ sudo apt install build-essential wget cmake
$ cd ~
wget https://github.com/google/googletest/archive/refs/tags/release-1.10.0.tar.gz
tar -xf release-1.10.0.tar.gz
cd googletest-release-1.10.0/
cmake .
make
sudo make install
sudo ldconfig
동작확인
Hello World
설치 후 Qt의 동작 확인을 위하여 Hello World
프로그램을 작성합니다.
Qt Creator를 실행한 후 새로운 프로젝트를 생성합니다.
간단히 Hello World를 출력할 것이므로 프로젝트 종류는 [Qt Console Application]
을 선택합니다.
프로젝트명을 정한 후, Next를 연타합니다.
생성된 main.cpp
를 다음과 같이 수정합니다.
#include <QApplication>
#include <iostream>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
std::cout << "Hello, world!" << std::endl;
std::cout << "Qt Version: " << QT_VERSION_STR << std::endl;
return app.exec();
}
빌드 후 실행합니다.
※ 만약 g++ 4.8 이하의 버전을 사용한다면 c++11 옵션 활성화를 위하여 프로젝트 파일 (.pro
)에 CONFIG += c++11
을 추가합니다.
※ 만약 QtCreator에서 컴파일이 되지 않는다면, [메뉴]
→ [Help]
→ [About Plugin]
→ C++ ClangCodeModel
을 체크 해제합니다.
단위 시험 설정하기 (gtest)
프로젝트 생성
subdir project 생성
Choose a template: [Ohter Project]
→ [Subdirs Project]
원하는 프로젝트 명을 입력합니다. 저는 MyProject
로 생성하였습니다.
테스트 대상 project 생성
Non-Qt Project
→ Plain C++ Application
을 선택합니다.
이름은 App
으로 입력하였습니다.
다음 소스코드를 추가합니다.
/* Addition.h */
#ifndef ADDITION_H
#define ADDITION_H
class Addition {
public:
static int twoValues(const int x, const int y);
};
#endif // ADDITION_H
/* Addition.cpp */
#include "Addition.h"
int Addition::twoValues(const int x, const int y) {
return x + y;
}
/* Multiply.h */
#ifndef MULTIPLY_H
#define MULTIPLY_H
class Multiply {
public:
static int twoValues(const int x, const int y);
};
#endif // MULTIPLY_H
/* Multiply.cpp */
#include "Multiply.h"
int Multiply::twoValues(const int x, const int y)
{
return x * y;
}
/* main.cpp */
#include <iostream>
#include <Addition.h>
#include <Multiply.h>
int main()
{
int x{4}, y{5};
int z1 = Addition::twoValues(x,y);
int z2 = Multiply::twoValues(x,y);
std::cout << "Addition Result: " << z1 << std::endl;
std::cout << "Multiply Result: " << z2 << std::endl;
return 0;
}
빌드 후, 실행하면 다음과 같이 결과를 얻게 됩니다.
Addition Result: 9
Multiply Result: 20
테스트 Subproject
Non-Qt Project
→ Plain C++ Application
을 선택합니다.
이름은 Test
로 입력했습니다.
다음과 같이 test case와 test runner를 작성합니다.
/* main.cpp */
#include <limits.h>
#include <gtest/gtest.h>
int main(int argc, char *argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
/* Addition_Test.cpp */
#include <limits.h>
#include "gtest/gtest.h"
#include "Addition.h"
class AdditionTest : public ::testing::Test {
protected:
virtual void SetUp() {
}
virtual void TearDown() {
// Code here will be called immediately after each test
// (right before the destructor).
}
};
TEST_F(AdditionTest,twoValues){
const int x = 4;
const int y = 5;
Addition addition;
EXPECT_EQ(9,addition.twoValues(x,y));
EXPECT_EQ(5,addition.twoValues(2,3));
}
/* Multiply_Test.cpp */
#include <limits.h>
#include "gtest/gtest.h"
#include "Multiply.h"
class MultiplyTest : public ::testing::Test {
protected:
virtual void SetUp() {
}
virtual void TearDown() {
}
};
TEST_F(MultiplyTest,twoValues){
const int x = 4;
const int y = 5;
Multiply multiply;
EXPECT_EQ(20,multiply.twoValues(x,y));
EXPECT_EQ(6,multiply.twoValues(2,3));
}
Test.pro 파일 수정
생성한 'Test' 프로젝트를 빌드하기 위해 외부 의존성(App 프로젝트와 google test라이브러리)을 추가합니다.
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
CONFIG += thread
CONFIG -= qt
INCLUDEPATH += \
../App \
/usr/local/include/gtest \
/usr/local/include/gmock
# gtest 를 사용하는데 필요한 함수를 추가합니다.
LIBS += -lgtest -L/usr/local/lib
LIBS += -lgmock -L/usr/local/lib
LIBS += -pthread
SOURCES += \
Addition_Test.cpp \
Multiply_Test.cpp \
main.cpp \
../App/Addition.cpp \
../App/Multiply.cpp
SUBDIRS += ../App
HEADERS += \
Addition_Test.h \
Multiply_Test.h
보충
빌드 후, 단위 시험을 실행하도록 설정하기
[Projects]
→ [Project Settings]
→ [Testing]
→ 을 Custom
으로 변경한 후, Automatical run tests after build 항목을 All 또는 Selected를 선택합니다.
결론
최종 파일 및 구조는 다음과 같습니다.
.
├── App
│ ├── Addition.cpp
│ ├── Addition.h
│ ├── App.pro
│ ├── main.cpp
│ ├── Multiply.cpp
│ └── Multiply.h
├── Test
│ ├── Addition_Test.cpp
│ ├── main.cpp
│ ├── Multiply_Test.cpp
│ └── Test.pro
├── MyProject.pro
└── MyProject.pro.user
참고
'개발도구 > 기타' 카테고리의 다른 글
[WSL] 윈도우와 환경변수 공유하지 않도록 설정하기 (1) | 2021.10.22 |
---|---|
[기타] zsh 설치후, nvm 동작하지 않는 오류 (0) | 2021.08.26 |
[powerShell] "ssh-copy-id" 대등 명령어 (0) | 2021.06.03 |
[Doxygen] 설치 및 한글 인코딩 오류 해결 (0) | 2021.05.17 |
[리눅스] 명령어 정리 - LFS (0) | 2021.04.28 |