web-dev-qa-db-fra.com

Comment créer une sortie CMake dans un répertoire 'bin'?

Je suis en train de construire un projet avec une structure de plugin. J'utilise CMake pour compiler le projet. Les plugins sont compilés dans des répertoires séparés. Mon problème est que CMake compile et enregistre les fichiers binaires et les plugins, les bibliothèques dynamiques, dans la structure de répertoires de la source. Comment faire en sorte que CMake enregistre les fichiers dans quelque chose comme un répertoire ./bin ?

134
Martin Kristiansen

Comme dans la réponse d'Oleg, je pense que la variable correcte à définir est CMAKE_RUNTIME_OUTPUT_DIRECTORY . Nous utilisons les éléments suivants dans notre racine 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)

Vous pouvez également spécifier les répertoires de sortie cible par cible:

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

Dans les deux cas, vous pouvez ajouter _[CONFIG] au nom de variable/propriété pour que le répertoire de sortie s'applique à une configuration spécifique (les valeurs standard de configuration sont DEBUG, RELEASE, MINSIZEREL et RELWITHDEBINFO.

234
Adam Bowen

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

25
Oleg

Utilisez la variable EXECUTABLE_OUTPUT_PATH CMake pour définir le chemin nécessaire. Pour plus de détails, reportez-vous à la documentation en ligne de CMake:

Documentation CMake 2.8.8

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

Quant à moi, j'utilise cmake 3.5, le code ci-dessous (set variable) ne fonctionne pas:

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

mais cela fonctionne (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

Que je le définisse dans le fichier principal CMakeLists.txt ou dans les fichiers individuels, cela suppose que je veux que toutes les bibliothèques et tous les répertoires soient placés en dehors du chemin principal, ce qui est la supposition la moins utile.

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