본문 바로가기

CMAKE

[CMAKE] 2. 추가적인 CMAKE 경로 설정 방법

1. 추가적인 경로 설정 방법을 알아보는 이유

 

이전 글에서 CmakeLists.txt 파일의 기본적인 경로 설정 방법을 실습해보았다. CmakeLists.txt파일을 이용하여 경로를 잡아주다보면 유난히 자주 쓰이는 경로라던지 까다롭게 경로가 설정이 되어있는 경우라던지 여러 경우가 존재할 것이다. 이런 경우를 마주했을 때 무작정 경로를 잡아주다보면 내가 경로를 잡기보다 내가 경로한테 잡히는(?) 경우가 발생할 것이다.

 

이러한 상황을 조금 더 쉽게 극복할 수 있게 CmakeLists.txt 파일 경로 설정 특성에 따른 몇 가지 경로 설정 방법을 실습해보자.

 

2. 추가적인 CMAKE 경로 설정 방법

 

만약 아래와 같은 프로젝트 디렉토리가 있다고 가정하자.

D:\Cmake_Test_2

 

이 Cmake_Test_2의 프로젝트의 실행 파일인 main.c가 D:\Cmake_Test_2\calculator 에 있고, main.c가 사용하는 소스 파일이 프로젝트 파일의 맨 끝 디렉토리인 D:\Cmake_Test_2\calculator\new\people\src에 존재한다면 모든 디렉토리에 CmakeLists.txt을 넣어 add_subdirectory(하위 디렉토리)를 계속해주어야 한다. (이해가 안된다면 이전 글을 제대로 실습해볼 것)

 

이렇게 파일을 추가하여 코드를 작성하기에 번거로움이 이만 저만이 아니다. 또한 저 src 디렉토리가 다른 실행파일에서도 자주 쓰인다면? 이 또한 마찬가지로 해당 실행파일과 관련된 모든 디렉토리에 타 경로에서도 add_subdirectory함수를 이용하고 그 하위 디렉토리마다 CmakeLists.txt를 또 만들어줘야하는 엄청난 번거로움이 발생한다. 그럼 문득 이러한 생각이 든다. 자주 쓰이거나 복잡한 경로를 변수 하나로 퉁칠 수는 없을까?

 

이를 위해 set 함수를 이용해보자. 사용 방법은 간단하다. 첫 번째 파라미터로 원하는 디렉토리 명을 넣어주고, 그 이름에 할당하고 싶은 경로를 넣어주면 된다. 아래를 참고하자.

set(PERIPH_DIR ${CMAKE_SOURCE_DIR}/calculator/new/people)
message(STATUS "PERIPH_DIR = ${PERIPH_DIR}")

이렇게 PERIPH_DIR라는 변수에  아주 긴 경로를 저장한다.

이를 아래 string 출력 함수인 message 함수를 통해 찍어보면 아래와 같이 경로가 잘 지정되었음을 알 수 있다.

 

이렇게 저장한 경로 변수는 라이브러리를 만들 때 아주 유용하게 쓸 수 있다.

add_library(TEST_FILES STATIC calculator.c)
target_include_directories(TEST_FILES PUBLIC ${PERIPH_DIR}/inc)

위 코드는 지난 글에서 작성한 라이브러리 선언 코드이다. PERIPH_DIR이라는 경로 변수를 선언하지 않았다면, 아래와 같이 길게 경로를 지정해주었어야 한다.

add_library(TEST_FILES STATIC calculator.c)
target_include_directories(TEST_FILES PUBLIC ${CMAKE_SOURCE_DIR}/calculator/new/people/inc)

아래 코드와 위 코드를 비교해보았을 때, 확실히 코드의 길이가 줄고 가독성도 매우 뛰어나다.

 

또한 더 중요한 점은 위에 있는 디렉토리를 include 시켜줄 때, PERIPH_DIR이라는 경로 변수를 사용하면, 중간 디렉토리에 CmakeLists.txt를 추가해서 add_subdirectory함수를 써줄 필요도 없다. 더 좋은 점은 아예 중간 경로마다 CmakeLists.txt 파일이 없어도 된다. (하지만 프로젝트 파일이 굉장히 많을 경우, 중간 경로에 접근하는 경우가 생기기 때문에 필요한 경우에만 사용하도록 하자.)

 

 

'CMAKE' 카테고리의 다른 글

[CMAKE] 1. VS CODE 코딩을 위한 CMAKE 경로 설정 하기(기본)  (0) 2023.09.20