So legen Sie eine CMake-Option () in der Befehlszeile fest

91

Ich habe eine CMakeLists.txt erstellt, die Folgendes enthält

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)

Standardmäßig ist BUILD_TESTS AUS. Wie kann ich es ohne CMake-GUI, aber mit dem Befehl cmake selbst einschalten? Ich habe Folgendes versucht, aber es funktioniert nicht

cmake .. -G %1 -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_TESTS=ON
Denilson Amorim
quelle
24
Listen Sie Ihre Flags vor dem ..Argument auf.
Arrowd
2
Mögliches Duplikat von stackoverflow.com/questions/5998186/…
Dharman
Wie die Antwort auf den 5998186 zeigt, ist es 'cmake MyProjectFolder -DMyOption = ON'
Langley
1
Haben Sie CMakeCache.txt vor cmake wieder entfernt?
Henry Hu
1
Mögliches Duplikat des Hinzufügens von Befehlszeilenoptionen zu CMake
jww

Antworten:

98

Löschen Sie die Datei CMakeCache.txt und versuchen Sie Folgendes:

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

Sie müssen alle Befehlszeilendefinitionen eingeben, bevor Sie den Pfad einfügen können.

fenix688
quelle
Wie kann AUS speziell angegeben werden? Ich kann die CUDA-Option einfach nicht deaktivieren.
Ébe Isaac
7
@ Ébe-isaac Wenn Sie eine Option explizit deaktivieren möchten, verwenden Sie einfach -DOPTION=OFF.
Tomáš Mlčoch
Es scheint, dass Sie die Optionen nicht mehr vor dem Pfad übergeben müssen: Funktioniert cmake .. -G <whatever> -DOPTION=ONfür mich mit CMake 3.16.2 einwandfrei.
Alexander Revo
8

Eine zusätzliche Option besteht darin, in Ihren Build-Ordner zu wechseln und den Befehl zu verwenden ccmake .

Dies ist wie die GUI, aber terminalbasiert. Dies hilft natürlich nicht bei einem Installationsskript, kann aber zumindest ohne Benutzeroberfläche ausgeführt werden.

Die einzige Warnung, die ich habe, ist, dass Sie manchmal nicht generieren können, wenn Sie Warnungen haben. Wenn dies der Fall ist, verlassen Sie die Schnittstelle und rufen Sie ancmake .

crazywill32
quelle
Das OP fordert ausdrücklich "keine GUI" an.
sancho.s ReinstateMonicaCellio
2

das funktioniert bei mir:

cmake -D DBUILD_SHARED_LIBS=ON DBUILD_STATIC_LIBS=ON DBUILD_TESTS=ON ..
Daniel Li
quelle