it-swarm.dev

Como eu faço a saída do CMake em um diretório 'bin'?

Atualmente estou construindo um projeto com uma estrutura de plugins. Estou usando o CMake para compilar o projeto. Os plugins são compilados em diretórios separados. Meu problema é que o CMake compila e salva os binários e plugins, bibliotecas dinâmicas, na estrutura de diretórios da fonte. Como faço para o CMake salvar os arquivos em algo como um diretório ./bin ?

134
Martin Kristiansen

Como na resposta de Oleg, acredito que a variável correta a ser definida é CMAKE_RUNTIME_OUTPUT_DIRECTORY . Nós usamos o seguinte em nossa raiz CMakeLists.txt:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

Você também pode especificar os diretórios de saída em uma base por alvo:

set_target_properties( targets...
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/lib"
    RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
)

Em ambos os casos, você pode anexar _[CONFIG] ao nome da variável/propriedade para tornar o diretório de saída aplicável a uma configuração específica (os valores padrão para configuração são DEBUG, RELEASE, MINSIZEREL e RELWITHDEBINFO).

234
Adam Bowen

Use set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")

25
Oleg

Use a variável CMake EXECUTABLE_OUTPUT_PATH para definir o caminho necessário. Para detalhes, consulte a documentação on-line do CMake:

CMake 2.8.8 Documentação

6
gtikok
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)
3
mcandre

Quanto a mim estou usando cmake 3.5, o abaixo (set variable) não funciona:

set(
      ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
      RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)

mas isso funciona (set set_target_properties):

set_target_properties(demo5
    PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    LIBRARY_OUTPUT_DIRECTORY "/home/xy/cmake_practice/lib/"
    RUNTIME_OUTPUT_DIRECTORY "/home/xy/cmake_practice/bin/"
)
1
Jayhello

Independentemente de eu definir isso no CMakeLists.txt principal ou nos individuais, ele ainda assume que eu quero todas as libs e bins fora do caminho principal, que é a suposição menos útil de todos.

0
Jerry Miller
cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)
0
Meet Modia

Inglês não é minha língua nativa; por favor, desculpe erros de digitação.

use esta configuração de linha:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
coloque o seu projeto CMakeLists.txt.
este $ {PROJECT_SOURCE_DIR} é seu diretório de origem atual onde o lugar do projeto.
e se vagar por que é $ {EXECUTABLE_OUTPUT_PATH}
verifique este arquivo CMakeCache.txt e então procure a chave Word output path,
todas as variáveis ​​definem aqui, isso daria uma explicação completa do projeto todo setting·

0
jdir.s