Cómo configurar una opción de CMake () en la línea de comando

92

Creé un CMakeLists.txt que contiene lo siguiente

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)

Por defecto, BUILD_TESTS está APAGADO, ¿cómo puedo ENCENDERlo sin CMake GUI, pero con el comando cmake en sí? Intenté lo siguiente, pero no funciona

cmake .. -G %1 -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_TESTS=ON
Denilson Amorim
fuente
24
Enumere sus banderas antes del ..argumento.
arrowd
2
Posible duplicado de stackoverflow.com/questions/5998186/…
dharman
Como señala la respuesta al 5998186, es 'cmake MyProjectFolder -DMyOption = ON'
Langley
1
¿Ha eliminado CMakeCache.txt antes de cmake nuevamente?
Henry Hu

Respuestas:

101

Elimine el archivo CMakeCache.txt e intente esto:

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

Debe ingresar todas las definiciones de la línea de comandos antes de incluir la ruta.

fenix688
fuente
¿Cómo especificar específicamente OFF? Parece que no puedo desactivar la opción CUDA.
Ébe Isaac
7
@ Ébe-isaac Si desea desactivar explícitamente una opción, utilice -DOPTION=OFF.
Tomáš Mlčoch
Parece que ya no tienes que pasar las opciones antes de la ruta: cmake .. -G <whatever> -DOPTION=ONfunciona bien para mí con CMake 3.16.2.
Alexander Revo
8

Una opción adicional es ir a su carpeta de compilación y usar el comando ccmake .

Esto es como la GUI pero basada en terminales. Obviamente, esto no ayudará con un script de instalación, pero al menos se puede ejecutar sin una interfaz de usuario.

La única advertencia que tengo es que no le permitirá generar a veces cuando tenga advertencias. si ese es el caso, salga de la interfaz y llamecmake .

crazywill32
fuente
El OP solicita específicamente "no GUI".
sancho.s ReinstateMonicaCellio
2

esto funciona para mi:

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