Como definir uma opção CMake () na linha de comando

97

Eu criei um CMakeLists.txt que contém o seguinte

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 padrão BUILD_TESTS é OFF, como posso ativá-lo sem CMake GUI, mas com o próprio comando cmake? Tentei o seguinte, mas não funcionou

cmake .. -G %1 -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DBUILD_TESTS=ON
Denilson Amorim
fonte
25
Liste suas bandeiras antes do ..argumento.
seta de
2
Possível duplicata de stackoverflow.com/questions/5998186/…
dharman
Como a resposta à 5998186 aponta, é 'cmake MyProjectFolder -DMyOption = ON'
Langley
1
Você removeu CMakeCache.txt antes de cmake novamente?
Henry Hu,

Respostas:

107

Exclua o arquivo CMakeCache.txt e tente o seguinte:

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

Você deve inserir todas as suas definições de linha de comando antes de incluir o caminho.

fenix688
fonte
Como especificar especificamente OFF? Eu simplesmente não consigo desligar a opção CUDA.
Ébe Isaac
7
@ Ébe-isaac Se você deseja desativar explicitamente uma opção, basta usar -DOPTION=OFF.
Tomáš Mlčoch
Parece que você não precisa mais passar as opções antes do caminho: cmake .. -G <whatever> -DOPTION=ONfunciona bem para mim com o CMake 3.16.2.
Alexander Revo
10

Uma opção adicional é ir para a pasta de construção e usar o comando ccmake .

É como a GUI, mas baseada em terminal. Isso obviamente não ajudará com um script de instalação, mas pelo menos pode ser executado sem uma IU.

O único aviso que tenho é que ele não permitirá que você gere algumas vezes quando houver avisos. se for esse o caso, saia da interface e chamecmake .

crazywill32
fonte
O OP pede especificamente "sem GUI".
sancho.s ReinstateMonicaCellio
3

isso funciona para mim:

cmake -D DBUILD_SHARED_LIBS=ON DBUILD_STATIC_LIBS=ON DBUILD_TESTS=ON ..
Medici Lorenzo
fonte