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

24
Listen Sie Ihre Flags vor dem ..Argument auf.
Arrowd


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

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.


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 .


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 ..
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.