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 ?
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
.
Utilisez set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "/some/full/path/to/bin")
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:
$ cat CMakeLists.txt
project (hello)
set(EXECUTABLE_OUTPUT_PATH "bin")
add_executable (hello hello.c)
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/"
)
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.
cat CMakeLists.txt
project (hello)
set(CMAKE_BINARY_DIR "/bin")
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
add_executable (hello hello.c)