2017-06-23 2 views
1

Wenn ich die folgende Zeile habe. Dann würde ich erwarten, dass TEST_OPTION standardmäßig auf ON gesetzt wird.CMAKE Standardwert für Optionen funktioniert nicht

option(TEST_OPTION "A test option" ON) 

Wenn ich es testen, scheint es nicht ON standardmäßig zu sein. Um zu testen, ich bin die Erstellung eine einfache Anwendung:

int main() { 

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

Ich habe auch eine einfache CMakeLists.txt:

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) 

Wenn ich versuche, mit $ cmake && cmake --build . zu kompilieren, ich würde erwarten, dass der Compiler-Fehler zu begegnen, aber ich nicht! Wenn ich option(TEST_OPTION ...) durch set(TEST_OPTION ON) ersetze, dann bekomme ich den Kompilierfehler, den ich erwartete.

Kann jemand erklären, warum option() die Option nicht standardmäßig auf den Standardwert setzt?

+2

Ihr Testcode sollte funktionieren. Hast du von einem leeren Build-Verzeichnis angefangen? – Florian

+0

Wow, du hast Recht! Der CMakeCache wurde nicht aktualisiert. Ich musste den CMake-Cache löschen, dann wurde der Fehler wie erwartet ausgelöst. – Stewart

Antwort

2

Lösung: Der Cmake-Cache scheint nicht zu aktualisieren, wenn Sie den Standardwert einer Option ändern. Daher wurde die "ON" -Option vollständig ignoriert, indem zuerst mit "OFF" ausgewählt wurde. Um dies zu lösen, musste ich einfach die generierten CMake-Artefakte löschen und cmake erneut ausführen.

Verwandte Themen