it-swarm-eu.dev

Jak mám udělat CMake výstup do 'bin' dir?

Momentálně buduji projekt se strukturou pluginu. Používám CMake ke kompilaci projektu. Pluginy jsou kompilovány v samostatných adresářích. Můj problém je, že CMake kompiluje a ukládá binární soubory a pluginy, dynamické knihovny, do adresářové struktury zdroje. Jak nastavím CMake uložení souborů v adresáři ./bin ?

134

Stejně jako v odpovědi Olega se domnívám, že správná proměnná pro nastavení je CMAKE_RUNTIME_OUTPUT_DIRECTORY . V našem kořenovém souboru CMakeLists.txt používáme následující:

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)

Můžete také určit výstupní adresáře na základě cíle:

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"
)

V obou případech můžete k názvu proměnné/vlastnosti přidat _[CONFIG], aby se výstupní adresář aplikoval na konkrétní konfiguraci (standardní hodnoty pro konfiguraci jsou DEBUG, RELEASE, MINSIZEREL a RELWITHDEBINFO).

234
Adam Bowen

Použít set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")

25
Oleg

K nastavení potřebné cesty použijte proměnnou EXECUTABLE_OUTPUT_PATH CMake. Podrobnosti naleznete v online dokumentaci CMake:

Dokumentace CMake 2.8.8

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

Pokud jde o mě, používám cmake 3.5, níže (set variable) nefunguje:

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/"
)

ale toto funguje (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

Bez ohledu na to, zda to definuji v hlavním CMakeLists.txt nebo v jednotlivých, stále předpokládá, že chci všechny libs a koše z hlavní cesty, což je nejméně užitečný předpoklad všech.

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

Angličtina není můj rodný jazyk; omluvte prosím chyby při psaní.

použijte tento konfigurační řádek:
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/build/)
umístěte svůj projekt CMakeLists.txt.
this $ {PROJECT_SOURCE_DIR} je váš aktuální zdrojový adresář, kde je místo projektu.
a pokud se potulujete proč je $ {EXECUTABLE_OUTPUT_PATH}
zkontrolujte tento soubor CMakeCache.txt a poté prohledejte klíč Word output path,
všechny zde definované proměnné by poskytly úplné vysvětlení projektu setting·

0
jdir.s