티스토리 뷰
참고 : https://cmake.org/cmake/help/v3.12/command/list.html
CMake의 LIST는 배열과 같은 역할을 합니다.
읽기
list(LENGTH <list> <출력변수>) : 출력변수에 매개변수로 넣은 list의 길이를 대입
list(GET <list> <인덱스> [<인덱스> ...] <출력변수>) : 출력변수에 매개변수로 넣은 리스트의 인덱스에 해당하는 값을 대입
list(SUBLIST <list> <시작인덱스> <끝인덱스> <출력변수>) : 출력변수에 매개변수로 넣은 리스트의 sublist 를대입
list(FIND <list> <값> <출력변수>) : 출력변수에 매개변수로 넣은 리스트의 값을 찾아서 인덱스를 대입
list(APPEND <list> [<element> ...]) : 매개변수로 넣은 리스트에 element의 값을 덧붙인다.
list(FILTER <list> <INCLUDE|EXCLUDE> REGEX <정규표현식>)
: 매개변수로 넣은 리스트에 REGEX 를 통해 값을 필터링 한다, INCLUDE, EXCLUDE 무엇을 선택하느냐에 따라서
필터의 동작이, 이 정규표현식에 일치하는 원소를 포함하게 하는 것인지, 제외하게 하는 것인지가 결정된다.
list(INSERT <list> <인덱스> <원소> [<원소> ...]) : 주어진 인덱스에 원소를 리스트에 끼워넣는다.
list(REMOVE_ITEM <list> <값> [<값> ...]) : 주어진 값과 같은 원소를 리스트에서 삭제한다.
list(REMOVE_DUPLICATES <list>): 리스트에서 중복된 원소를 삭제한다.
list(TRANSFORM <list> <ACTION> [<SELECTOR>] [OUTPUT_VARIABLE <output_variable>])
: selector를 명시할 시, 해당 selector에 맞는 조건을 가진 원소에만 ACTION을 적용합니다. selector가 없을 시
모든 원소에 ACTION을 적용합니다. 그 후 결과는 output_variable에 저장됩니다.
여기서 <ACTION>에 들어갈 수 있는 연산은 아래와 같습니다.
list(TRANSFORM <list> <APPEND 혹은 PREPREND> <value> ...)
list(TRANSFORM <list> <TOLOWER|TOUPPER> ...)
list(TRANSFORM <list> REPLACE <regluar_expression> <replcae_expression> ...)
<SELECTOR>는 아래 중 하나로 선택하면 됩니다.
list(TRANSFORM <list> <ACTION> AT <Index> [<index> ...] ...)
: 리스트의 index를 특정한다
list(TRANSFORM <list> <ACTION> FOR <start> <stop> [<step>] ...)
: 특정한 range 로 한다.
list(TRANSFORM <list> <ACTION> REGEX <regex> ...)
: 정규표현식에 일치하는 아이템에만 ACTION을 적용한다
예제
LIST(APPEND my_list "HELLO WORLD")
LIST(APPEND my_list "BYE WORLD")
LIST(APPEND my_list "GOOD NIGHT WORLD")
SET(my_list_length)
LIST(LENGTH my_list my_list_length)
message("현재 LIST의 길이 = ${my_list_length}")
SET(second_element)
LIST(GET my_list 1 second_element)
message("두 번 째 원소 = ${second_element}")
message("원래 리스트= ${my_list}")
SET(my_sublist)
LIST(SUBLIST my_list 0 1 my_sublist)
message("서브 리스트 = ${my_sublist}")
SET(hello_world_string "HELLO WORLD")
SET(find_hello_world)
LIST(FIND my_list ${hello_world_string} find_hello_world)
message("hello world가 있는 인덱스 = ${find_hello_world}")
LIST(FILTER list EXCLUDE REGEX "WORLD")
message("필터 후 리스트 = ${my_list}")
CMakeLists.txt 를 만들고, 기본적인 코드를 작성하고 위의 코드를 넣어서 실행하세요.
CMake는 왠지 고리타분하고 별 기능도 없을 것 같다고 생각했는데, TRNASFORM에서 람다같은 함수형도 지원하고
FIND나 FILTER같은, 빌드스크립트의 특성상 꼭 필요한 유틸리티 메소드도 지원하는게 굉장히 흥미롭습니다.
아 그리고 까먹었는데
Ordering 도 지원합니다.
LIST(REVERSE <list>) : list를 뒤집습니다.
LIST(SORT <list>) : list를 알파벳 순으로 정렬합니다.
'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] get_filename_component (0) | 2019.12.23 |
[CMake, KOR] foreach - 1 (0) | 2019.12.23 |
- Total
- Today
- Yesterday
- CMake get_filename_Component
- 14714 앱
- 14714 공부법
- 복습 어플
- CMake run protoc
- get_filename_component
- CMake run proto compiler
- 14714 복습법
- react-native
- CMAke 파일이름 추출
- 14714 플래너
- buffer-over-flow
- review reminder
- 14714 어플
- 14714 공부법 어플리케이션
- aws 프리티어 요금청구
- CMake get file name
- CMake 반복문
- CMake 기초
- function pointer overflow
- 14714 review
- 함수포인터 오버라이트
- CMake for문
- aws 청구문의
- CMake for
- 14714 어플리케이션
- 복습 계획어플
- CMake 강좌
- 토리파 공부법
- CMake probouf
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |