티스토리 뷰
참고 : https://cmake.org/cmake/help/v3.14/command/get_filename_component.html
소스트리에서 파일의 이름을 추출하고, extension을 떼었다 붙이고, 폴더만 추출하고 하는 작업들은 정말 귀찮고 짜증납니다.
특히 언어나 OS마다 separator 나 encoding 등등이 달라서 쉽게 구현하는것도 여의치 않아서 여기저기 언어별로 API랑
stackoverflow 를 뒤져가면서 찾아봐야되는데.. CMake는 태생자체가 그런 일을 하려고 만들어졌기 때문인지..
get_filename_component 라는 기특한 함수가 있습니다.
우선 기본적인 모양은 위와 같습니다.
아래의 예제에서 보시겠지만, <var>는 결과를 담을 변수, <FileName> 은 path를 포함한 파일이름
<mode>는 바로 설명할 기능들입니다.
1. DIRECTORY : 파일이름 빼고 디렉터리 이름만 골라서 반환.
아래에서 예를 보겠지만.. proto/foo.a.b.c 라는 소스root의 relative path로 파일 이름을 넘겨주면
proto 라는 디렉토리 이름만 골라서 반환해줍니다.
2. NAME : 이번에는 디렉터리 이름을 빼고 파일 이름만 바환해줍니다.
3. EXT : 최장확장자 이름만 반환해줍니다. foo.a.b.c 라는 파일이 있으면, 결과로 얻는 값은 .a.b.c입니다.
4. NAME_WE : 디렉터리 이름이나, 최장확장자 다 없에버리고 파일 이름만 반환해줍니다.
5. LAST_EXT : 제일 뒤의 확장자만 반환해줍니다. foo.a.b.c 라면, .c만 반환
6. NAME_WLE : 디렉터리 이름이나 마지막 확장자 빼고 반환해줍니다.
그리고, mode 대신에
위에서 ABSOLUTE를 넣으면 proto/Student.proto를 /home/user/Desktop/proto/Student.proto 로 바꾼값을
반환해줍니다.
CACHE 를 명시하면, 말 그대로 CACHE가 됩니다.
예제
get_filename_component(TEST_VAR_0 Student.proto NAME)
get_filename_component(TEST_VAR_1 proto/foo.a.b.c NAME)
get_filename_component(TEST_VAR_2 Student.proto EXT)
get_filename_component(TEST_VAR_3 proto/foo.a.b.c EXT)
get_filename_component(TEST_VAR_4 Student.proto NAME_WE)
get_filename_component(TEST_VAR_5 proto/foo.a.b.c NAME_WE)
get_filename_component(TEST_VAR_6 Student.proto NAME_WLE)
get_filename_component(TEST_VAR_7 proto/foo.a.b.c NAME_WLE)
get_filename_component(TEST_VAR_8 proto/inner_folder/Student.proto DIRECTORY)
get_filename_component(TEST_VAR_9 proto/foo.a.b.c DIRECTORY)
get_filename_component(TEST_VAR_10 proto/foo.a.b.c ABSOLUTE)
get_filename_component(TEST_VAR_10 proto/foo.a.b.c REALPATH)
foreach(SUFFIX_NUM RANGE 0 11)
LIST(APPEND TEST_VAR_LIST "TEST_VAR_${SUFFIX_NUM}")
message("TEST_VAL_LIST${SUFFIX_NUM} = ${TEST_VAR_${SUFFIX_NUM}}")
endforeach(SUFFIX_NUM)
'cmake' 카테고리의 다른 글
[CMake, ENG] Let's use "FUNCTION" in CMake (0) | 2019.12.27 |
---|---|
[CMake, KOR/ENG] How to generate gRPC c++ code with CMake (0) | 2019.12.24 |
[CMake,ENG/KOR] compile protobuf with CMake (0) | 2019.12.24 |
[CMake, KOR] foreach - 1 (0) | 2019.12.23 |
[CMake,KOR] LIST (0) | 2019.12.23 |
- Total
- Today
- Yesterday
- aws 프리티어 요금청구
- 14714 어플리케이션
- 14714 플래너
- 14714 앱
- aws 청구문의
- CMake for문
- 복습 계획어플
- CMake get_filename_Component
- CMake get file name
- function pointer overflow
- CMake for
- CMake 강좌
- 14714 review
- CMAke 파일이름 추출
- 14714 공부법
- CMake 기초
- CMake run protoc
- 14714 복습법
- CMake probouf
- CMake run proto compiler
- 14714 공부법 어플리케이션
- react-native
- review reminder
- get_filename_component
- CMake 반복문
- 복습 어플
- 14714 어플
- buffer-over-flow
- 토리파 공부법
- 함수포인터 오버라이트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |