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

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.


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 .


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 ..
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.