2017-06-23 9 views
1

次の行がある場合。そして、私はTEST_OPTIONがデフォルトでONに設定されることを期待しています。オプションのCMAKEのデフォルト値が機能しない

option(TEST_OPTION "A test option" ON) 

私がテストすると、デフォルトではONのようではありません。テストするために、私は簡単なアプリケーションのコンパイルしています:、私は$ cmake && cmake --build .でコンパイルしようとした場合、私はコンパイルエラーが発生したことを期待する

cmake_minimum_required(VERSION 2.6) 
project(test) 

add_executable(test main.cpp) 

option(TEST_OPTION "A test option" ON) 

if(TEST_OPTION) 
    target_compile_definitions(test PRIVATE TEST_OPTION) 
endif(TEST_OPTION) 

int main() { 

    #ifdef TEST_OPTION 
    #error "TEST_OPTION encountered" 
    #endif 
    return 0; 
} 

を私はまた、単純なCMakeLists.txtを持っていますしかし私はしない! option(TEST_OPTION ...)set(TEST_OPTION ON)に置き換えた場合、私は期待したコンパイルエラーが発生します。

なぜoption()がデフォルトでこのオプションをデフォルト値に設定しないのか説明できますか?

+2

あなたはテストコードが動作するはずです。空のビルドディレクトリから始めましたか? – Florian

+0

うわー、そうですよ! CMakeCacheがリフレッシュされなかったということでした。私はCMakeキャッシュを削除する必要があり、その後、期待どおりにエラーが発生しました。 – Stewart

答えて

2

解決策: オプションのデフォルトを変更すると、cmakeキャッシュが更新されないようです。そのため、最初に "OFF"を選択して構築することにより、 "ON"オプションは完全に無視されました。これを解決するには、生成されたcmake成果物を削除して、cmakeをもう一度実行しなければなりませんでした。

関連する問題