2017-11-24 30 views
0

特定の型が存在するかどうかを確認するために、基本的なcmakeを記述しようとしています。 私はcheck_type_sizeを複数回呼び出す際に問題があります。同じ変数(サイズを保持する変数)を複数回使用した場合は、初めてcheck_type_sizeを呼び出すときにのみ、その変数に値が設定されます。 4 VAR_SIZE1が2回目の呼び出しの後に更新されませんでしたが行なわ - 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-exist-いわゆるワンタイムインマクロ(one-time-in-macro))である。変数名を扱う独自のラッパーマクロに型チェックを入れてください。 – Florian

答えて

1

変数は、実際にあるCACHE変数(これはマクロのdocumentationに記載されている。変数が設定されたら、そのが更新されていない。[これはオミット成功チェック次回のために使用されているあなたはcmakeを実行します。]

異なるチェックさまざまな変数を使用する必要があります。

マクロで\ _function \ _existsだけと呼ばれる1時間]([CMakeのチェックの
+0

キャッシュ変数であることを明確にしてくれてありがとうございます。マクロを呼び出すたびに新しい変数を使うのを避けることは可能ですか? 私は、特定のタイプが存在することを確認することにのみ興味があります。 – syd101

+0

'check_type_size()'呼び出しの後に[unset(CACHE)](https://cmake.org/cmake/help/v3.9/command/unset.html)コマンドを使用して、変数をキャッシュからクリアすることができます。私はいくつかのプロジェクトでこのような使用法を見てきました。したがって、意味があるかもしれません。しかし、私はより洗練された方法として毎回異なる変数を使用して見つける。 – Tsyvarev

関連する問題