$<TARGET_FILE:protobuf::protoc> 은 어떤 의미인가?

이상문
2 min readJul 8, 2020

--

gRPC 관련 문서를 보다가 CMakeList.txt 로 어떻게 빌드를 하는지 훑어보는 중에 다음과 같은 표현을 발견했다.

set(_PROTOBUF_PROTOC $<TARGET_FILE:protobuf::protoc>)

_PROTOBUF_PROTOC 라는 변수로 $<TARGET_FILE:protobuf::protoc> 값을 설정하는 표현이다.

그런데 $<TARGET_FILE:protobuf::protoc> 이라는 표현은 또 어떤 것인가?

cmake 의 generator-expression 중의 하나임을 알게 되었다.

generator-expression 은 $<...> 형태로 표현한다. 괄호 내의 내용에 대해 어떤 값을 평가(evaluate)한다고 되어 있다.

링크한 페이지에서 TARGET_FILE 을 검색해보면,

$<TARGET_FILE:tgt>

Full path to the tgt binary file.

즉, 타켓의 전체 경로를 얻어오는 표현이다. 그러므로, $<TARGET_FILE:protobuf::protoc> 은 protobuf::protoc 의 전체 경로를 나타내게 된다.

그렇다면, 이 실제값은 어떻게 확인할 수 있을까. message() 를 사용하면 되지 않을까.

링크한 페이지의 가장 하단에 보면, generator-expression은 빌드 중에 평가되는 값이기 때문에 message()로는 확인할 수 없다라고 설명한다. 그리고, 확인할 수 있는 방법도 설명하고 있다.

$<TARGET_FILE:protobuf::protoc> 의 경우에는,

add_custom_target(genexdebug COMMAND ${CMAKE_COMMAND} -E echo "$<TARGET_FILE:protobuf::protoc>")

이 값은 cmake를 구성(configure) 단계가 아닌, 빌드(build) 단계에서 값이 출력된다.

--

--

이상문
이상문

Written by 이상문

software developer working mainly in field of streaming, using C++, javascript

No responses yet