본문 바로가기

Programming Languages/C++

[ C++ ] 빌드 도구 CMake 빌드 옵션 활용

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

mkdir -p /app/study/cpp/ch10

cd /app/study/cpp/ch10

cp -r /app/study/cpp/ch5 /app/study/cpp/ch10/MathAdder

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

project(testOption)

option(USE_ADDER "A simple library for adding 2 floats." ON)

if(USE_ADDER)
    add_subdirectory(MathAdder)

    list(APPEND EXTRA_LIB_DIRS "MathAdder")
    list(APPEND EXTRA_INCLUDES_DIRS "MathAdder")

    list(APPEND EXTRA_LINKS mathadder)
endif()

configure_file(Config.h.in ${CMAKE_CURRENT_BINARY_DIR}/Config.h)

add_executable(${PROJECT_NAME} main.cpp)

# 프로젝트가 사용하는 헤더파일 경로 설정
target_include_directories(${PROJECT_NAME} PRIVATE ${EXTRA_INCLUDES_DIRS} ${CMAKE_CURRENT_BINARY_DIR})

# 프로젝트가 라이브러리를 링크할 때 사용하는 경로 설정
target_link_directories(${PROJECT_NAME} PRIVATE ${EXTRA_LIB_DIRS})

target_link_libraries(${PROJECT_NAME} PRIVATE ${EXTRA_LINKS})
EOF

cat <<'EOF' > /app/study/cpp/ch10/Config.h.in
#cmakedefine USE_ADDER

#ifdef USE_ADDER
	#include <adder.h>
#endif
EOF

cat <<'EOF' > /app/study/cpp/ch10/main.cpp
#include <iostream>
#include <Config.h>

int main()
{
#ifdef USE_ADDER
	std::cout << "Using Library : " << "2 + 3 = " << mathadder::add(2, 3) << '\n';
#else
	std::cout << "Not Using Library : " << "2 + 3 = " << 2 + 3 << '\n';
#endif

	return EXIT_SUCCESS;
}
EOF

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

cmake -DUSE_ADDER=OFF -S /app/study/cpp/ch10 -B /app/study/cpp/ch10/build

make -C /app/study/cpp/ch10/build

# 라이브러리 미사용 확인
/app/study/cpp/ch10/build/testOption

cmake -DUSE_ADDER=ON -S /app/study/cpp/ch10 -B /app/study/cpp/ch10/build

make -C /app/study/cpp/ch10/build

# 라이브러리 사용 확인
/app/study/cpp/ch10/build/testOption