Comment définir une option CMake () en ligne de commande

92

J'ai créé un CMakeLists.txt qui contient les éléments suivants

project(P4V)
cmake_minimum_required(VERSION 2.6)

option(BUILD_STATIC_LIBS "Build the static library" ON)
option(BUILD_SHARED_LIBS "Build the shared library" ON)
option(BUILD_TESTS "Build test programs" OFF)

include_directories(${CMAKE_SOURCE_DIR}/include)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
set(CMAKE_BUILD_TYPE Release)

add_subdirectory(src)
if(BUILD_TESTS)
    add_subdirectory(tests)
endif(BUILD_TESTS)

Par défaut, BUILD_TESTS est OFF, comment puis-je l'activer sans l'interface graphique CMake, mais avec la commande cmake elle-même? J'ai essayé ce qui suit, mais ça ne marche pas

cmake .. -G %1 -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_TESTS=ON
Denilson Amorim
la source
24
Listez vos drapeaux avant l' ..argument.
arrowd
2
Copie
Comme le souligne la réponse au 5998186, il s'agit de 'cmake MyProjectFolder -DMyOption = ON'
Langley
1
Avez-vous supprimé CMakeCache.txt avant cmake à nouveau?
Henry Hu
1
Double

Réponses:

101

Supprimez le fichier CMakeCache.txt et essayez ceci:

cmake -G %1 -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_TESTS=ON ..

Vous devez entrer toutes vos définitions de ligne de commande avant d'inclure le chemin.

fenix688
la source
Comment spécifier spécifiquement OFF? Je n'arrive tout simplement pas à désactiver l'option CUDA.
Ébe Isaac
7
@ Ébe-isaac Si vous souhaitez désactiver explicitement une option, utilisez simplement -DOPTION=OFF.
Tomáš Mlčoch
Il semble que vous n'ayez plus à passer les options avant le chemin: cmake .. -G <whatever> -DOPTION=ONfonctionne très bien pour moi avec CMake 3.16.2.
Alexander Revo le
8

Une option supplémentaire consiste à accéder à votre dossier de construction et à utiliser la commande ccmake .

C'est comme l'interface graphique mais basé sur un terminal. Cela n'aidera évidemment pas avec un script d'installation, mais au moins il peut être exécuté sans interface utilisateur.

Le seul avertissement que j'ai est qu'il ne vous permettra pas de générer parfois lorsque vous avez des avertissements. si tel est le cas, quittez l'interface et appelezcmake .

crazywill32
la source
L'OP demande spécifiquement "pas d'interface graphique".
sancho.s ReinstateMonicaCellio
2

cela fonctionne pour moi:

cmake -D DBUILD_SHARED_LIBS=ON DBUILD_STATIC_LIBS=ON DBUILD_TESTS=ON ..
Daniel Li
la source