Je confectionne mon projet Visual Studio pour utiliser CMAKE, mais j'ai eu deux problèmes que je n'ai pas encore été capables de résoudre.
1 Comment puis-je définir un préprocesseur définir pour la libération et une autre pour le débogage?
2 J'ai un projet avec OpenGL et DirectX afin de débogopengl et de la versionOPENGL, je souhaite exclure tous les fichiers DirectX CPP / H de la bulde. Avec DebugDirectX et RemetDeRecTX excluectx excluent les fichiers OpenGL. Comment puis-je configurer cela? P>
EDIT: P>
Heres Ce que je suis arrivé pour 1. Jusqu'à présent: p>
cmake_minimum_required(VERSION 2.8) project(TEngine) if(CMAKE_CONFIGURATION_TYPES AND MSVC) #DebugOpenGL flags set(CMAKE_CXX_FLAGS_DEBUGOPENGL "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1" CACHE STRING "Flags used by the C++ compiler during maintainer builds." FORCE) set(CMAKE_C_FLAGS_DEBUGOPENGL "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1" CACHE STRING "Flags used by the C compiler during maintainer builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_DEBUGOPENGL "/debug /INCREMENTAL" CACHE STRING "Flags used for linking binaries during maintainer builds." FORCE ) set(CMAKE_SHARED_LINKER_FLAGS_DEBUGOPENGL "/debug /INCREMENTAL" CACHE STRING "Flags used by the shared libraries linker during maintainer builds." FORCE ) #ReleaseOpenGL flags set(CMAKE_CXX_FLAGS_RELEASEOPENGL "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags used by the C++ compiler during maintainer builds." FORCE) set(CMAKE_C_FLAGS_RELEASEOPENGL "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags used by the C compiler during maintainer builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_RELEASEOPENGL "/INCREMENTAL:NO" CACHE STRING "Flags used for linking binaries during maintainer builds." FORCE ) set(CMAKE_SHARED_LINKER_FLAGS_RELEASEOPENGL "/INCREMENTAL:NO" CACHE STRING "Flags used by the shared libraries linker during maintainer builds." FORCE ) #DebugDirectX flags set(CMAKE_CXX_FLAGS_DEBUGDIRECTX "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1" CACHE STRING "Flags used by the C++ compiler during maintainer builds." FORCE) set(CMAKE_C_FLAGS_DEBUGDIRECTX "/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1" CACHE STRING "Flags used by the C compiler during maintainer builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_DEBUGDIRECTX "/debug /INCREMENTAL" CACHE STRING "Flags used for linking binaries during maintainer builds." FORCE ) set(CMAKE_SHARED_LINKER_FLAGS_DEBUGDIRECTX "/debug /INCREMENTAL" CACHE STRING "Flags used by the shared libraries linker during maintainer builds." FORCE ) #ReleaseDirectx flags set(CMAKE_CXX_FLAGS_RELEASEDIRECTX "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags used by the C++ compiler during maintainer builds." FORCE) set(CMAKE_C_FLAGS_RELEASEDIRECTX "/MD /O2 /Ob2 /D NDEBUG" CACHE STRING "Flags used by the C compiler during maintainer builds." FORCE) set(CMAKE_EXE_LINKER_FLAGS_RELEASEDIRECTX "/INCREMENTAL:NO" CACHE STRING "Flags used for linking binaries during maintainer builds." FORCE ) set(CMAKE_SHARED_LINKER_FLAGS_RELEASEDIRECTX "/INCREMENTAL:NO" CACHE STRING "Flags used by the shared libraries linker during maintainer builds." FORCE ) set(CMAKE_CONFIGURATION_TYPES "DebugOpenGL;ReleaseOpenGL;DebugDirectX;ReleaseDirectX") set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING "Reset the configurations to what we need" FORCE) if(CMAKE_BUILD_TYPE STREQUAL "DebugOpenGL") add_definitions(/DTE_USE_OPENGL) endif() if(CMAKE_BUILD_TYPE STREQUAL "ReleaseOpenGL") add_definitions(/DTE_USE_OPENGL) endif() if(CMAKE_BUILD_TYPE STREQUAL "DebugDirectX") add_definitions(/DTE_USE_OPENGL) endif() if(CMAKE_BUILD_TYPE STREQUAL "ReleaseDirectX") add_definitions(/DTE_USE_OPENGL) endif() endif() set(Boost_ADDITIONAL_VERSIONS "1.47" "1.47.0") set(BOOST_ROOT "${TEngine_SOURCE_DIR}/Externals/boost_1_47_0") if(WIN32) add_definitions(-DTEWINDOWS) elseif(LINUX) add_definitions(-DTELINUX -DTE_USE_OPENGL) endif() subdirs(TEEngineTest TECore TEGraphics TEPhysics TEngine)
3 Réponses :
1: 2:
Si je vous ai bien compris, vous devez créer une variable d'option P> , puis vérifiez-la lorsque vous ajoutez une nouvelle cible: P> if(USE_OPENGL)
add_subdirectory(OpenGL)
else()
add_subdirectory(DirectX)
endif()
Je n'ai pas les fichiers dans différents sous-dossiers si ... et je souhaite les fichiers du projet, mais pour les configurations OpenGL, je souhaite exclure les fichiers DirectX CPP / H. et pour les configurations DirectX, je souhaite exclure les fichiers OpenGL. . Dans Visual Studio, vous pouvez cliquer avec le bouton droit de la souris sur un fichier et sélectionner exclure de la construction. 1. Répond à la première question merci :)
Aucun problème, il suffit de remplacer add_subdirectory () appelez de ma réponse avec SET (Sources OpenGL1.CPP OpenGL2.CPP, etc.) code>. Sinon DO
Set (Sources DirectX1.CPP DirectX2.CPP, etc.) CODE>. Enfin, en dehors de la clause Si la clause crée votre objectif de construction en passant {SRCS}.
Grande réponse arrowdodger ... Un peu d'addition: si vous utilisez un ensemble (sources) avec une clause IF-else en CMAKE, les fichiers source "désélectionnés" ne figureront pas dans Visual Studio.
Et un autre ajout: lors de la course à la course à partir de Commandline, CUKE_BUILD_TYPE n'est pas défini, d'où l'enregistrement 1) échouera probablement. Peut-être une meilleure approche serait d'utiliser la propriété Compile_Definitions où vous pouvez distinguer la configuration ... Bien que je dois admettre que ce n'est pas la solution la plus élégante
J'essaie avec 1. Maintenant .. Je suis en train de construire avec la version de l'interface graphique pour Windows .. Les configurations sont configurées mais les configurations ne sont pas de définir le réglage de la définition. J'ai modifié le poste initial avec ce que j'ai eu
Je n'ai pas à boucle à travers les configurations d'une manière ou d'une autre? Je pense que cumake_build_type est toujours réglé sur le même là-bas?
set(MY_DEFINITION $<$<CONFIG:Debug>:definition_for_debug> $<$<CONFIG:RelWithDebInfo>:definition_for_rel_with_debug> $<$<CONFIG:Release>:definition_for_release> $<$<CONFIG:MinSizeRel>:definition_for_tight_release> )
- Comment puis-je mettre un préprocesseur définir pour la libération et un autre pour le débogage? Li> ol>
La bonne façon de le faire est de définir la propriété COMPILE_DEFINITIONS à la portée correcte en utilisant des expressions du générateur. P>
Si vous voulez ajouter des définitions à toutes les cibles comme
add_definitions () code> n'utilise alors: p>
add_executable(foo src/func1.h src/func1.cpp)
"Bien qu'il soit possible d'utiliser des expressions de générateur pour ajouter des fichiers source à une cible conditionnellement, je ne connais aucun IDES qui prennent en charge des fichiers source par configuration." Visual Studio permet de mettre en place une condition sur la balise