2017-11-24 1 views
0

특정 cmake가 존재하는지 여부를 확인하기 위해 기본 cmake를 작성하려고합니다. check_type_size를 여러 번 호출하는 데 문제가 있습니다. 동일한 변수 (크기를 보유하는 변수)를 여러 번 사용하면 check_type_size를 호출 할 때만 채워집니다. 4 VAR_SIZE1가 두 번째 호출 이후에 업데이트되지 않은 일을 - INT의 INT 확인 크기의 확인 크기 : 이것은 내가 무엇을 얻을cmake check_type_size 여러 호출에서 같은 변수를 사용할 때 문제가 발생했습니다

cmake_minimum_required(VERSION 3.8) 
project(TEST LANGUAGES C;CXX) 
INCLUDE (CheckTypeSize) 

check_type_size("int" VAR_SIZE1) 
message(${VAR_SIZE1}) 
check_type_size("void *" VAR_SIZE1) 
message(${VAR_SIZE1}) 
message("VAR_SIZE1 was not updated after the second call.\n") 


check_type_size("int" VAR_SIZE2) 
message(${VAR_SIZE2}) 
check_type_size("void *" VAR_SIZE3) 
message(${VAR_SIZE3}) 
message("We get the correct size if use different variable every time.") 

add_executable(TEST "${TEST_SOURCE_DIR}/main.cpp") 

.

Check size of int 
Check size of int - done 
4 
Check size of void * 
Check size of void * - done 
8 
We get the correct size if use different variable every time. 

어떤 일이 일어나고 있는지 알 수 있습니까? check_type_size() 호출로 생성

+1

가능한 복제 https://stackoverflow.com/questions/46204710/ cmake-check-function-exists- only-called-one-time-in-macro)를 지원합니다. 그냥 변수 네이밍을 처리하는 자신의 래퍼 매크로에 형식 검사를하십시오. – Florian

답변

1

변수는 실제로있는 캐시 변수 (이 매크로에 대한 documentation에 설명되어 있습니다. 변수가 설정되면, 그가 업데이트되지 않습니다.이 생략 성공적으로 검사 다음에 사용하면 cmake을 실행 .]

다른 검사 다른 변수를 사용한다.

매크로 \ _function \ _exists에만 호출 한 시간 ([CMake 검사의
+0

캐시 변수임이 분명해졌습니다. 매크로를 호출 할 때마다 새로운 변수를 사용하는 것을 피할 수 있습니까? 특정 유형이 있는지 확인하는 데에만 관심이 있습니다. – syd101

+0

'check_type_size()'호출 후에 [unset (CACHE)] (https://cmake.org/cmake/help/v3.9/command/unset.html) 명령을 사용하여 캐시에서 변수를 지울 수 있습니다. 일부 프로젝트에서는 이러한 사용법을 보았으므로 의미가있을 수 있습니다. 하지만 매번 다른 변수를 사용하면 더 깨끗한 방법으로 사용됩니다. – Tsyvarev

관련 문제