cmake als anders met optie

Ben ik met een probleem om te gebruiken option samen if-else in de cmake.

project(test)

option(TESTE "isso é um teste" OFF)

if(TESTE)
  message("true")
else()
  message("false")
endif()

add_executable(test main.cpp)

Het altijd weer true zelfs als ik UIT bij de optie, wat doe ik verkeerd?

InformationsquelleAutor Alex | 2014-03-18

 

2 Replies
  1. 34

    Dat komt omdat de waarde van de optie is opgeslagen in de cache (CMakeCache.txt).

    Als u de standaard waarde in de CMakeLists maar de werkelijke waarde reeds is opgeslagen in de cache, het zal alleen belasting de waarde van de cache.

    Dus voor het testen van de logica in uw CMakeLists, verwijder de cache elke keer opnieuw uitgevoerd CMake.

    • rm CMakeCache.txt of gewoon verplaatsen naar de prullenbak/prullenmand.
    • Als we de werkelijke waarde van een optie tijdens het bellen CMake dat zal worden overschreven. Er is geen noodzaak om te verwijderen CMakeCache.txt. We moeten verwijderen CMakeCache.txt alleen als we besluiten om niet door te geven van de werkelijke waarde, en we willen het gebruik van de standaard, terwijl in een eerdere uitvoeren van cmake we deden geef een waarde anders dan de standaard.
  2. 7

    Ik een soortgelijk probleem had en in staat was om het op te lossen met behulp van een enigszins andere benadering.

    Ik moest een aantal compilatie vlaggen worden toegevoegd in het geval cmake werd aangeroepen met een optie in het commando-regel (ik.e cmake -DUSE_MY_LIB=ON).
    Als de optie ontbrak in de cmake aanroeping ik wilde om terug te gaan naar de standaard het geval was inschakelen van de optie uit te schakelen.

    Ik liep in dezelfde problemen, waarbij de waarde voor deze optie werd in de cache tussen aanroepen:

    cmake -DUSE_MY_LIB=ON .. #invokes cmake and puts USE_MY_LIB=ON in CMake's cache.
    cmake ..                 #invokes cmake with the cached option ON, instead of OFF
    

    De oplossing die ik heb gevonden is het wissen van de optie van binnen CMakeLists.txt nadat de optie is gebruikt:

    option(USE_MY_LIB "Use MY_LIB instead of THEIR_LIB" OFF) #OFF by default
    if(USE_MY_LIB)
        #add some compilation flags
    else()
        #add some other compilation flags
    endif(USE_MY_LIB)
    unset(USE_MY_LIB CACHE) # <---- this is the important!!
    

    Opmerking:
    De unset optie is beschikbaar sinds cmake v3.0.2

    • Dit werkt niet voor mij, ik heb eigenlijk uit te voeren cmake met “-DUSE_MY_LIB=OFF” om het te laten werken. Als ik gewoon weglaten, dan houdt gedraagt alsof werden genoemd met “OP”
    • Ook @m4l490n heb je geprobeerd het toevoegen van een set in de if-else-gedeelte? Als er kennelijk niet werkt voor mij.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *