2013-06-28 2 views
3

매크로 범위 내에서 및 매크로 범위 동안 cmake 매크로의 인수가 읽기 전용입니까?매크로 범위 내에서 CMake 매크로 인수 설정

macro(test arg) 
    message("output: ${arg}") 
    set(arg "overwritten") 
    message("output: ${arg}") 
endmacro(test) 

test("original") 

출력이 동작을 변경할 수있는 방법이 있나요

output: original 
output: original 

입니다 :

다음 코드를 고려한다?

+0

매우 흥미 롭다. 나는 몰랐다. 그래서 set (arg "덮어 쓰기")의 효과가 무엇인지 궁금하다. 나는 그가 "original"이라는 이름의 변수를 "덮어 쓴"변수로 설정할 수 있다고 생각했지만'message { "$ {original}"}는 아무 것도 출력하지 않는다. – Antonio

답변

6

사용을 대신 function :

function(test arg) 
    message("output: ${arg}") 
    set(arg "overwritten") 
    message("output: ${arg}") 
endfunction(test) 

CMake docs on macro에서 다음과 같은에서 argN 같은 매크로 값으로 매개 변수는 보통 CMake의 의미에서 변수가 아니라는 것을

참고. 그것들은 매크로를 사용하는 C 전처리 기처럼 문자열 대체물 인 입니다. CMake 변수를 true로 원하면 function 명령을 살펴 봐야합니다.

매크로와 달리 함수는 새로운 범위를 도입합니다. 따라서 함수에서 변수가 set 일 때마다 호출자가 변경 사항을 볼 수 있도록 매개 변수로 PARENT_SCOPE을 부여해야합니다.

+0

나는 '함수'에 대해 몰랐다. - 고마워. –