Emplacement exécutable CMake
J'ai une question très simple structure de répertoire:
Project
Project/src
Project/build
Fichiers Source sont dans Project/src
et je ne l'src construire dans Project/build
. Après l'exécution de cmake ../; make
je peux lancer l'exécutable ainsi: Project/build$ src/Executable
- qui est, la Executable
est créé dans le build/src
répertoire.
Comment puis-je régler l'emplacement de l'exécutable dans le CMakeLists.txt
fichier? J'ai tenté de suivre quelques exemples trouvés à cmake.org
mais les liens que les travaux ne semblent pas montrer de ce comportement.
Mon Project/src/CMakeLists.txt
fichier est répertorié ici.
include_directories(${SBSProject_SOURCE_DIR}/src)
link_directories(${SBSProject_BINARY_DIR}/src)
set ( SBSProject_SOURCES
main.cpp
)
add_executable( TIOBlobs ${SBSProject_SOURCES})
Et le haut-niveau Project/CMakeLists.txt
:
cmake_minimum_required (VERSION 2.6)
project (SBSProject)
set (CMAKE_CXX_FLAGS "-g3 -Wall -O0")
add_subdirectory(src)
source d'informationauteur simont
Vous devez vous connecter pour publier un commentaire.
Vous avez un couple de choix.
Pour modifier l'emplacement par défaut des fichiers exécutables, ensemble
CMAKE_RUNTIME_OUTPUT_DIRECTORY
à l'emplacement souhaité. Par exemple, si vous ajoutezà votre
Project/CMakeLists.txt
avant laadd_subdirectory
de commande, votre exécutable finira dansProject/build
pour Unix, construit oubuild/<config type>
pour Win32 construit. Pour plus de détails, exécutez:Une autre option pour un projet de cette taille est d'avoir un CMakeLists.txt. Vous pourriez plus ou moins remplacer
add_subdirectory(src)
avec le contenu deProject/src/CMakeLists.txt
pour atteindre le même chemin de sortie.Cependant, il ya un couple d'autres questions.
Vous voulez probablement pour éviter d'utiliser
link_directories
en général. Pour une explication, exécutezMême si vous n'utilisez
link_directories
il est peu probable que les bibliothèques se trouvent dans${SBSProject_BINARY_DIR}/src
Un autre problème est que la
CMAKE_CXX_FLAGS
s'appliquent à Unix construit, ce qui devrait probablement être enveloppé dans unif (UNIX) ... endif()
bloc. Bien sûr, si vous n'êtes pas de la construction d'autre chose que d'Unix, c'est un non-problème.Pour terminer, je vous recommande d'exiger de CMake 2.8 au minimum, sauf si vous devez utiliser 2.6 - CMake est un activement le projet et la version actuelle a de nombreuses améliorations significatives plus de 2,6
De sorte qu'un seul de remplacement pour
Project/CMakeLists.txt
pourrait ressembler à:Une autre façon de déplacer le fichier exécutable de l'emplacement est via
set(EXECUTABLE_OUTPUT_PATH Dir_where_executable_program_is_located)