web-dev-qa-db-fra.com

Passer l'argument à CMAKE via l'invite de commande

J'ai un makefile pour mon projet et aussi je passe un argument et sur la base de cet argument, je mets un drapeau. Je peux le faire. mais maintenant je veux faire la même chose en utilisant cmake. J'ai créé cmakelist.txt mais je ne sais pas comment passer l'argument et vérifier la valeur de l'argument dans cmakelist.txt.

Échantillon de mon makefile:

ifeq "$(FAB)" "po"
      //setting some flags
else
      //setting some iother flag
endif

Quelle est la façon de prendre l'argument de l'invite de commande et de définir des indicateurs en fonction de cela?

44
Meluha

Dans le fichier CMakeLists.txt, créez une variable de cache, comme indiqué ici:

SET(FAB "po" CACHE STRING "Some user-specified option")

Source: http://cmake.org/cmake/help/v2.8.8/cmake.html#command:set

Ensuite, utilisez l'interface graphique (ccmake ou cmake-gui) pour définir la variable de cache, ou spécifiez la valeur de la variable sur la ligne de commande cmake:

cmake -DFAB:STRING=po

Source: http://cmake.org/cmake/help/v2.8.8/cmake.html#opt:-Dvar:typevalue

Modifiez votre variable de cache en booléen si, en fait, votre option est booléenne.

66
Peter

CMake 3.13 sur Ubuntu 16.04

Cette approche est plus flexible car elle ne contraint pas MY_VARIABLE à un type:

$ cat CMakeLists.txt 
message("MY_VARIABLE=${MY_VARIABLE}")
if( MY_VARIABLE ) 
    message("MY_VARIABLE evaluates to True")
endif()

$ mkdir build && cd build

$ cmake ..
MY_VARIABLE=
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=True
MY_VARIABLE=True
MY_VARIABLE evaluates to True
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=False
MY_VARIABLE=False
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=1
MY_VARIABLE=1
MY_VARIABLE evaluates to True
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build

$ cmake .. -DMY_VARIABLE=0
MY_VARIABLE=0
-- Configuring done
-- Generating done
-- Build files have been written to: /path/to/build
6
PJ_Finnegan