:
변수 참조 폼 ${variable_name}
을 가지며 인용 인수 나 인용되지 않은 인자 내부를 평가 하였다. 변수 참조 은 변수 값으로 대체되거나 변수가 설정되지 않은 경우 빈 문자열로 대체됩니다.
즉, PROJECT_BINARY_DIR
은 글자 그대로 "PROJECT_BINARY_DIR"문자열을 나타냅니다. ${...}
에 캡슐화하면 이라는 내용이 PROBECT_BINARY_DIR이라는 변수의이됩니다.
고려 : 당신은 아마 이미 짐작으로
는
set(FOO "Hello there!")
message(FOO) # prints FOO
message(${FOO}) # prints Hello there!
, include_directories(PROJECT_BINARY_DIR)
단순히 포함 디렉토리 이름 PROJECT_BINARY_DIR의 하위 디렉토리를 추가하려고 시도합니다. 대부분의 빌드 시스템에서 그러한 디렉토리가 존재하지 않는다면 명령을 무시하기 때문에 명령이 예상대로 작동한다는 인상을 줄 수 있습니다. 상수가 1이면
if(<constant>)
사실 : 다시 the documentation explains this behavior
set(FOO TRUE)
if(FOO)
message("Foo was set!")
endif()
:
혼란의 인기 소스는 if()
변수를 명시 적으로 역 참조를 필요로하지 않는다는 사실에서 온다 , ON, YES, TRUE, Y 또는 0이 아닌 숫자. 상수가 0, OFF, NO, FALSE, N, IGNORE, NOTFOUND, 빈 문자열이거나 접미사 -NOTFOUND로 끝나는 경우 False입니다. 명명 된 부울 상수 은 대소 문자를 구분하지 않습니다. 인수가 이러한 상수 중 하나가 아니면 변수로 처리됩니다.
if(<variable>)
참 변수가 거짓 일정하지 않은 값으로 정의되는 경우. 그렇지 않으면 거짓. (매크로 인수는 변수가 아닙니다.변수 경우에 TRUE
지점, 그리고 일정한 경우에 FALSE
분기를 취할 것
unset(BLA)
set(FOO "BLA")
if(FOO)
message("if(<variable>): True")
else()
message("if(<variable>): False")
endif()
if(${FOO})
message("if(<constant>): True")
else()
message("if(<constant>): False")
endif()
:) 특히
, 하나는 같은 이상한 예를 가지고 올 수 있습니다. 이것은 상수 인 경우 CMake가 변수 BLA
을 찾아 (정의되지 않았기 때문에 FALSE 브랜치로 끝납니다) 체크를 수행하기 때문입니다.
어떻게하면 if (SFML_FOUND)와 같은 것이 작동합니까? – danijar
'if()'는 변수와 값 모두에서 작동하므로 특별한 경우입니다. 'if (SFML_FOUND)'와'if ($ {SFML_FOUND}) '가 모두 작동하는 동안 그들은 실제로 다른 일을합니다 : [if'에 대한 문서]를 확인하십시오 (http://www.cmake.org/cmake/help /v3.0/command/if.html),'if ()'와'if ()'의 차이에 특별한주의를 기울이십시오. 그에 따라 답변을 업데이트하겠습니다. –
ComicSansMS