본문 바로가기

C++/CMake

(6)
add_dependencies [1. 개요]빌드(컴파일) 순서를 결정하는 add_dependencies 는 target_link_libraries 와 어떤 차이가 있는지 정리한다.[2. target_link_libraries / add_dependencies]target_link_libraries 도 빌드 순서를 제어한다는 점에서 add_dependencies 와 유사하다.그러나 가장 큰 차이점이 있다면 링킹 처리 순서도 관여한다는 점이다. 그렇다면, add_dependencies 가 유용한 순간은 언제인가?target 간 실제 의존성이 있지는 않지만 (링킹과 관련 없지만) 빌드 순서를 제어할 필요가 있을 때add_custom_command 나 add_custom_target 등으로 먼저 빌드해야 할 것이 있을 때등이 있다.[3. 결..
LINK_LIBRARIES 와 INTERFACE_LINK_LIBRARIES 의 차이점 [1. 개요]get_property 를 통해 라이브러리 참조 관계를 가져와 일부 수정 후set_property 를 통해 적용했다 생각했지만,cmake 빌드 결과에서 해당 target 의 라이브러리 참조 관계는 적용되지 않았다. 이는, LINK_LIBRARIES 대상으로만 수정이 되었고,INTERFACE_LINK_LIBRARIES 를 대상으로는 수정이 되지 않았기 때문이었다.[2. PRIVATE, PUBLIC, INTERFACE]target 의 헤더파일 참조 경로나 라이브러리 링킹 정보를 명시할 때 scope 를 지정할 수 있다.PRIVATE: 해당 target 만 참조 (이 target 을 참조하는 대상은 상관없음)PUBLIC: 해당 target 및 이 target 을 참조하는 대상도 영향을 받음INT..
산출물 관련 설정, 공유 라이브러리 [1. 개요]리눅스 기준, 빌드 결과물이 공유라이브러리 (.so) 파일에 의존하는 경우특히 boost 나 tbb 등 기본적으로 시스템에 설치 된 라이브러리가 아니라 별도 라이브러리 인 경우 프로그램 시작 시, 필요 한 공유 라이브러리를 로드 하지 못하여 실행하지 못할 수 있음.윈도우의 경우 현재 디렉터리를 기준으로 찾는 시늉(?) 이라도 하는 것 같던데,리눅스는 그렇지 않음. 여기서는 기본적으로 산출물이 공유 라이브러리를 찾는 기준을 설정하는 법을 정리한다.[2. RPATH]readelf -d "mybinary" 를 살펴 보면 RPATH 항목이 있음. 이 항목은 cmake 로 프로젝트 설정 시 -DCMAKE_SKIP_BUILD_RPATH=TRUE 로 설정하면 제거 할 수 있으나, 서비스 환경에 배포 시,..
CMake command 정리 2 add_subdirectory (source_dir, [binary_dir], ...) => CMakeLists.txt 가 있는 디렉터리 경로를 source_dir 에 명시하도록 한다. => fd
리눅스 CMake 설치 [1. 개요] centos:7 기준으로 cmake 설치 혹은 업데이트 방법 정리 [2. yum 을 이용한 설치] yum search cmake yum install -y cmake cmake --version yum 이용한 설치 시 cmake version 은 2.8.12.2 최신 버전의 cmake를 설치하려면 아래와 같은 단계를 수행] [3. cmake 최신 버전 설치] github cmake repository 에서 바이너리를 가져와 설치 wget https://github.com/Kitware/CMake/releases/download/v3.25.1/cmake-3.25.1-linux-x86_64.tar.gz tar -zxf cmake-3.25.1-linux-x86_64.tar.gz cd cmake-..
CMake command 정리 cmake_minimum_required => 프로젝트에 대한 cmake 의 최소 버전을 명시 => ex) cmake_minimum_required(VERSION 3.1) project => 프로젝트의 이름을 설정 => 버전 관리도 할 수 있음 => 하지만, 프로그램 언어 정도만 기술하는게 편해보임 => ex) project(myproject C CXX) => CXX == C++ set => 사용 할 값에 대한 변수명을 명시 => set(변수명 값) => ex) set(CMAKE_BUILD_TYPE Release) message => 콘솔 화면에 로그를 기록 => message(Mode messages...) => mode 는 주로 STATUS, FATAL_ERROR, DEBUG, TRACE 사용해도 충..