centos 7에서 yum으로  cmake를 설치하면, 오래된 버전이 설치된다. (2.x 대 버전)

프로젝트에서 3.x 이상의 cmake 버전을 요구하면, 해당 버전의 소스파일을 받아서 컴파일 해주어야 한다.

 

1. 기존 CMake 가 있다면 삭제

yum remove cmake

 

2. 새로운 CMake 설치

01. tar 파일 다운로드

현재 최신버전이 3.27.0 이다.

sudo su
cd /usr/local/src
wget http://www.cmake.org/files/v3.27/cmake-3.27.0.tar.gz

02. 압축해제

tar -zxvf cmake-3.27.0.tar.gz

03. 설치

cd cmake-3.27.0
./bootstrap --prefix=/usr/local
make
make install

04. 설치확인

버전정보가 잘 나오면 설치 성공.

cmake --version

 

참고

https://hgko1207.github.io/2021/01/25/linux-11/

QTest로 유닛 테스트를 작성하고, CMake로 빌드파일 만들어 Visual Studio로 빌드하는데 아래와 같은 오류 메시지가 뜨는 경우가 있다.

 

오류메시지

error LNK2019: unresolved external symbol _main referenced in function "int __cdecl invoke_main(void)"

 

원인

main 함수가 없어 entry point가 제대로 설정되지 않았기 때문이다

 

해결책

테스트 케이스가 작성된 cpp 파일 하단에, 아래의 내용을 넣어주면 된다.

QTEST_MAIN(MyFirstTest)
#include "tst_myfirsttest.moc"

 

tst_myfirsttest.cpp 전체 소스

#include <QObject>
#include <QTest>
#include <qDebug>


class MyFirstTest : public QObject
{
    Q_OBJECT

private:
    bool myCondition()
    {
        return true;
    }

private slots:
    void initTestCase()
    {
        qDebug("Called before everything else.");
    }

    void myFirstTest()
    {
        QVERIFY(true);  // check that a condition is satisfied
        QCOMPARE(1, 1); // compare two values
    }

    void mySecondTest()
    {
        QVERIFY(myCondition());
        QVERIFY(1 != 2);
    }

    void cleanupTestCase()
    {
        qDebug("Called after myFirstTest and mySecondTest.");
    }
};

QTEST_MAIN(MyFirstTest)
#include "tst_myfirsttest.moc"

 

CMakeLists.txt

set(_components
    Core
    Test)

foreach(_component ${_components})
    find_package(Qt5${_component})
    list(APPEND QT_LIBRARIES ${Qt5${_component}_LIBRARIES})
    list(APPEND QT_INCLUDES ${Qt5${_component}_INCLUDE_DIRS})
    add_definitions(${Qt5${_component}_DEFINITIONS})
endforeach()

include_directories(${QT_INCLUDES})

find_program(QT_QMAKE_EXECUTABLE qmake)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)

enable_testing(true)

add_executable(mytest tst_myfirsttest.cpp)
add_test(NAME mytest COMMAND mytest)
target_link_libraries(mytest PRIVATE ${QT_LIBRARIES})
qt_generate_moc(tst_myfirsttest.cpp tst_myfirsttest.moc TARGET mytest)

+ Recent posts