본문 바로가기

Programming Languages/C++

[ C++ ] 빌드 도구 CMake 라이브러리 생성 및 활용

1. 라이브러리 생성

mkdir -p /app/study/cpp/ch3

cd /app/study/cpp/ch3

cat <<'EOF' > /app/study/cpp/ch3/adder.h
#pragma once

namespace mathadder
{
	int add(int a, int b);
	float add(float a, float b);
}
EOF

cat <<'EOF' > /app/study/cpp/ch3/adder.cpp
#include "adder.h"

int mathadder::add(int a, int b)
{
	return (a+b);
}

float mathadder::add(float a, float b)
{
	return (a+b);
}
EOF

# cmake 버전 확인
cmake --version

cat <<'EOF' > /app/study/cpp/ch3/CMakeLists.txt
# 타 환경에서 빌드할 수 있는 최소 버전 명을 기입
cmake_minimum_required(VERSION 3.21.4)

# 프로젝트 이름 지정
project(mathadder)

# 생성할 라이브러리 파일 명 및 빌드 대상 소스 파일을 지정
add_library(mathadder adder.cpp)
EOF

# cmake 옵션 확인
cmake

mkdir -p /app/study/cpp/ch3/build

cd /app/study/cpp/ch3/build; cmake -S ..

make


2. 라이브러리 활용

mkdir -p /app/study/cpp/ch4

cd /app/study/cpp/ch4

mkdir -p /app/study/cpp/ch4/include

mkdir -p /app/study/cpp/ch4/lib

cp /app/study/cpp/ch3/adder.h /app/study/cpp/ch4/include/

cp /app/study/cpp/ch3/build/libmathadder.a /app/study/cpp/ch4/lib/

cat <<'EOF' > /app/study/cpp/ch4/main.cpp
#include "include/adder.h"
#include <iostream>

int main()
{
	std::cout << "2 + 3 = " << mathadder::add(2, 3) << '\n';
	return EXIT_SUCCESS;
}
EOF

# cmake 버전 확인
cmake --version

cat <<'EOF' > /app/study/cpp/ch4/CMakeLists.txt
# 타 환경에서 빌드할 수 있는 최소 버전 명을 기입
cmake_minimum_required(VERSION 3.21.4)

# 프로젝트 이름 지정
project(libTest)

# 생성할 실행 파일 명 및 빌드 대상 소스 파일을 지정
add_executable(testLIB main.cpp)

target_link_directories(testLIB PRIVATE ${CMAKE_SOURCE_DIR}/lib/)

target_link_libraries(testLIB mathadder)
EOF

mkdir -p /app/study/cpp/ch4/build

cd /app/study/cpp/ch4/build; cmake -S ..

make

/app/study/cpp/ch4/build/testLIB

 

3. 라이브러리 시스템 설치

mkdir -p /app/study/cpp/ch5

cd /app/study/cpp/ch5

cp -r /app/study/cpp/ch3/* /app/study/cpp/ch5/

cat <<'EOF' > /app/study/cpp/ch5/CMakeLists.txt
# 타 환경에서 빌드할 수 있는 최소 버전 명을 기입
cmake_minimum_required(VERSION 3.21.4)

# 프로젝트 이름 지정
project(mathadder)

# 생성할 라이브러리 파일 명 및 빌드 대상 소스 파일을 지정
add_library(mathadder adder.cpp)

# 
set_target_properties(mathadder PROPERTIES PUBLIC_HEADER adder.h)

# 라이브러리를 /usr/local/lib 에 설치
# 공용 헤더를 /usr/local/include 에 설치
install(TARGETS mathadder LIBRARY DESTINATION lib
		PUBLIC_HEADER DESTINATION include
		)
EOF

rm -rf /app/study/cpp/ch5/build/*

cd /app/study/cpp/ch5/build; cmake -S ..

make install


4. 시스템에 설치된 라이브러리 활용

mkdir -p /app/study/cpp/ch6

cd /app/study/cpp/ch6

cat <<'EOF' > /app/study/cpp/ch6/main.cpp
#include <adder.h>
#include <iostream>

int main()
{
	std::cout << "2 + 3 = " << mathadder::add(2, 3) << '\n';
	return EXIT_SUCCESS;
}
EOF

cat <<'EOF' > /app/study/cpp/ch6/CMakeLists.txt
# 타 환경에서 빌드할 수 있는 최소 버전 명을 기입
cmake_minimum_required(VERSION 3.21.4)

# 프로젝트 이름 지정
project(testLIB)

# 생성할 실행 파일 명 및 빌드 대상 소스 파일을 지정
add_executable(testLIB main.cpp)

target_link_libraries(testLIB mathadder)
EOF

mkdir -p /app/study/cpp/ch6/build

cd /app/study/cpp/ch6/build; cmake -S ..

make

# 시스템에 설치된 라이브러리를 이용하여 잘 설치된 것을 확인
/app/study/cpp/ch6/build/testLIB