CMake에서 링커 옵션을 지정해 주고자 할 경우 target_link_options() 커맨드를 사용할 수 있다. 특정 링커 옵션을 지정하고자 할 경우, 해당 링커 옵션을 다음과 같이 target_link_options() 커맨드 내에 그대로 적어주면 된다. target_link_options( [linker option]) 다음은 hello.c 파일을 빌드할 때 "-Wl,--hash-style=gnu -Wl,--as-needed"라는 링커 옵션을 주는 CMakeLists.txt 파일의 예시이다. set(TARGET_APP hello) add_executable(${TARGET_APP} hello.c) target_link_libraries(${TARGET_APP} PRIVATE pthread) tar..
개요 본 글에서는 CMake를 이용하여 빌드할 때, 특정 디렉토리를 다른 곳으로 복사하는 방법을 소개한다. 본 글에서 사용된 환경은 다음과 같다. CMake 실행 및 빌드 환경 : 우분투 리눅스 18.04 CMake 버전 : 3.13.2 CMakeLists.txt에 디렉토리 복사 명령문 작성하기 CMakeLists.txt 파일에 add_custom_command() 명령문을 작성하여, 타겟 빌드 시에 특정 디렉토리를 복사할 수 있다. add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${FROM_DIR} ${TO_DIR}) 위 명령문에서 작성자의 의도에 따라 변경될 수 있는 부분은 각각 다음과 ..
개요 본 글에서는 CMake를 이용하여 빌드할 때, 특정 디렉토리를 삭제하는 방법을 소개한다. 본 글에서 사용된 환경은 다음과 같다. CMake 실행 및 빌드 환경 : 우분투 리눅스 18.04 CMake 버전 : 3.13.2 CMakeLists.txt에 디렉토리 삭제 명령문 작성하기 CMakeLists.txt 파일에 add_custom_command() 명령문을 작성하여, 타겟 빌드 시에 특정 디렉토리를 삭제할 수 있다. add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove_directory ${DIR}) 위 명령문에서 작성자의 의도에 따라 변경될 수 있는 부분은 각각 다음과 같다. ${TARGET} : 빌드 타..
개요 본 글에서는 CMake를 이용하여 빌드할 때, 디렉토리를 생성하는 방법을 소개한다. 본 글에서 사용된 환경은 다음과 같다. CMake 실행 및 빌드 환경 : 우분투 리눅스 18.04 CMake 버전 : 3.13.2 CMakeLists.txt에 디렉토리 생성 명령문 작성하기 CMakeLists.txt 파일에 add_custom_command() 명령문을 작성하여, 타겟 빌드 시에 디렉토리를 생성할 수 있다. 예를 들어 빌드 결과 파일을 특정 디렉토리를 생성하여 복사하고자 할 때 사용할 수 있다. add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E make_directory ${DIR}) 위 명령문에서 작성자의 의도에 따..
개요 본 글에서는 CMake를 이용하여 빌드할 때, 특정 파일을 삭제하는 방법을 소개한다. 본 글에서 사용된 환경은 다음과 같다. CMake 실행 및 빌드 환경 : 우분투 리눅스 18.04 CMake 버전 : 3.13.2 CMakeLists.txt에 삭제 명령문 작성하기 CMakeLists.txt 파일에 add_custom_command() 명령문을 작성하여, 타겟 빌드 시에 원하는 파일을 삭제할 수 있다. add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E remove ${DELETE_FILE}) 위 명령문에서 작성자의 의도에 따라 변경될 수 있는 부분은 각각 다음과 같다. ${TARGET} : 빌드 타겟 (예: add_..
개요 본 글에서는 CMake를 이용하여 빌드할 때, 특정 파일을 원하는 디렉토리로 복사하는 방법을 소개한다. 본 글에서 사용된 환경은 다음과 같다. CMake 실행 및 빌드 환경 : 우분투 리눅스 18.04 CMake 버전 : 3.13.2 CMakeLists.txt에 파일 복사 명령문 작성하기 CMakeLists.txt 파일에 add_custom_command() 명령문을 작성하여, 타겟 빌드 시에 원하는 파일을 원하는 디렉토리로 복사할 수 있다. add_custom_command(TARGET ${TARGET} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${FROM} ${TO}) 위 명령문에서 작성자의 의도에 따라 변경될 수 있는 부분은 각각 다음과 같다. ${TARG..
본 글에서는 글 작성 시점의 최신 안정 버전인 3.19.2 버전의 cmake를 리눅스에 설치하는 방법을 소개한다. 본 글에서 사용된 리눅스 환경은 다음과 같다. Ubuntu 16.04 0. 만약 기존에 설치되어 있는 과거 버전의 cmake가 이미 있을 경우 다음 명령으로 제거한다. sudo apt purge cmake 1. CMake를 빌드하는데 필요한 패키지를 설치한다. sudo apt update sudo apt install wget build-essential sudo 2. CMake 3.19.2 버전을 다운로드하고 압축을 해제한다. wget https://github.com/Kitware/CMake/releases/download/v3.19.2/cmake-3.19.2.tar.gz tar zxf ..
개요 본 글에서는 CMake를 이용한 C 라이브러리 작성법을 소개한다. 본 글에서 사용된 환경은 다음과 같다 CMake 실행 및 빌드 환경 : 우분투 리눅스 16.04 (도커 컨테이너) CMake 버전: 3.13.2 참고로 리눅스 상에 CMake를 설치하는 방법은 다음 글에서 확인할 수 있다. 2019/08/02 - [개발환경/CMake] - 리눅스에 CMake 설치하기 hello 라이브러리 작성 "Hello world"라는 문자열을 화면에 출력하는 (아주 간단한) API를 제공하는 라이브러리를 작성해 본다. 다음과 같이 hello.c 파일과 hello.h 파일을 작성한다. hello.c 파일은 hello 라이브러리의 메인 구현 파일로써, "Hello world"라는 문자열을 출력하는 PrintHello..
리눅스에 CMake 설치하기 : 3.18.0 버전 본 글에서는 글 작성 시점의 최신 안정 버전인 3.18.0 버전의 cmake를 리눅스에 설치하는 방법을 소개한다. 본 글에서 사용된 리눅스 환경은 다음과 같다. Ubuntu 리눅스 18.04 0. 만약 기존에 apt 명령을 통해 설치된 cmake가 이미 있을 경우 다음 명령으로 제거한다. sudo apt purge cmake 1. 필요한 패키지를 설치한다. $ sudo apt update $ sudo apt install wget build-essential 2. CMake 3.18.0 버전을 다운로드하고 압축을 해제한다. $ wget https://github.com/Kitware/CMake/releases/download/v3.18.0/cmake-3...
리눅스에 CMake 설치하기 : 3.17.3 버전 본 글에서는 글 작성 시점의 최신 안정 버전인 3.17.3 버전의 cmake를 리눅스에 설치하는 방법을 소개한다. 본 글에서 사용된 리눅스 환경은 다음과 같다. Ubuntu 리눅스 18.04 0. 만약 기존에 apt 명령을 통해 설치된 cmake가 이미 있을 경우 다음 명령으로 제거한다. sudo apt purge cmake 1. 필요한 패키지를 설치한다. $ sudo apt update $ sudo apt install wget build-essential 2. CMake 3.17.3 버전을 다운로드하고 압축을 해제한다. $ wget https://github.com/Kitware/CMake/releases/download/v3.17.3/cmake-3...
CMake를 이용한 C 언어 프로그래밍 #2 : 컴파일 정의(definition) 추가하기 본 글에서는 CMake를 사용하여 컴파일할 때 컴파일 정의(definition)을 추가하는 방법을 설명한다. 다음 두 가지 cmake 커맨드를 통해 컴파일 정의를 추가할 수 있다. add_compile_definitions() target_compile_definitions() add_compile_definitions() add_compile_definitions() 커맨드는 현재 CMakeLists.txt 및 하위 CMakeLists.txt 내에서 전역으로 적용되는 정의를 추가하는데 사용된다. 즉, 본 커맨드를 통해 정의를 추가하면 CMakeLists.txt 상에 기술된 모든 타겟에 동일하게 적용된다. 다음은 ..
CMake 커맨드: 이것저것 공통 사항 1. 커맨드는 대소문자 모두 사용 가능하다. 즉, set() 과 SET() 모두를 사용할 수 있다. SET 커맨드 1. SET 커맨드로 설정된 항목의 적용범위는 현재 디렉토리 및 하위 디렉토리(CMakeLists.txt)에만 적용된다. 상위 CMakeLists.txt나 동일레벨 타 CMakeLists.txt에는 적용되지 않는다. 2. SET 커맨드로 설정된 VAR 항목이 true/false와 같은 값으로 설정된 경우, if(${VAR})로 사용할 수 있다. STREQUAL 등의 비교 커맨드를 사용하지 않아도 된다. set (VAR true) if (${VAR} STREQUAL "true") do_something endif () # 아래와 같이도 사용 가능하다. i..