J’essaie simplement de construire un projet cmake en mode débogage pour activer les assertions. J’ai essayé les versions suivantes:
cmake -D CMAKE_BUILD_TYPE:STRING=Debug -L ../../ cmake -DCMAKE_BUILD_TYPE:STRING=Debug -L ../../ cmake -DCMAKE_BUILD_TYPE=Debug -L ../../
Malheureusement, aucun de ceux-ci n’a l’effet escompté – CMAKE_BUILD_TYPE
est défini sur Debug
(et par conséquent, le NDEBUG
-flag n’est pas transmis à gcc).
De plus, j’ai ajouté variable_watch(CMAKE_BUILD_TYPE)
à mon CMakeLists.txt
principal pour vérifier si la valeur get est remplacée quelque part. Mais la première sortie est un READ_ACCESS
dans mon READ_ACCESS
principal. De plus, j’ai ajouté variable_watch(CMAKE_BUILD_TYPE)
à mon CMakeLists.txt
principal, CMakeLists.txt
la valeur est déjà Release
.
Quelqu’un a-t-il une idée de la raison pour laquelle cmake ignore la configuration?
J’utilise la version 2.8.7 de cmake.
Merci d’avance pour votre aide!
Ok, fgrep -R "CMAKE_BUILD_TYPE"
finalement trouvé le problème pour moi. Dans certains CMakeLists.txt
CMakeLists.txt, j’ai trouvé quelque chose comme ça:
SET( CMAKE_BUILD_TYPE Release ... FORCE )
Cela remplace tous les parameters définis par l’utilisateur (à cause de la FORCE
).
Ce qui fonctionne pour moi c’est que:
IF( NOT CMAKE_BUILD_TYPE ) SET( CMAKE_BUILD_TYPE Release ... FORCE ) ENDIF()
Merci pour vos conseils!
Je suppose qu’il y a quelque chose qui ne va pas dans votre configuration ..
J’ai écrit un exemple simple et complet ici: https://dl.dropboxusercontent.com/u/68798379/cmake-build-type.tar.bz2
cmake_minimum_required (VERSION 2.8) project(playlib) message("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}") IF(CMAKE_BUILD_TYPE MATCHES Debug) message("Debug build.") ELSEIF(CMAKE_BUILD_TYPE MATCHES Release) message("Release build.") ELSE() message("Some other build type.") ENDIF() add_library(TESTLIB SHARED src/test.c)
Quand vous exécutez cmake avec
cmake -DCMAKE_BUILD_TYPE=Debug ../../
Il donne la sortie suivante:
$ ./gen-linux.sh -- The C comstackr identification is GNU 4.8.2 -- The CXX comstackr identification is GNU 4.8.2 -- Check for working C comstackr: /usr/bin/cc -- Check for working C comstackr: /usr/bin/cc -- works -- Detecting C comstackr ABI info -- Detecting C comstackr ABI info - done -- Check for working CXX comstackr: /usr/bin/c++ -- Check for working CXX comstackr: /usr/bin/c++ -- works -- Detecting CXX comstackr ABI info -- Detecting CXX comstackr ABI info - done CMAKE_BUILD_TYPE = Debug Debug build. -- Configuring done -- Generating done -- Build files have been written to: /home/wojci/stack-overflow/cmake-build-type/build/linux
Cela montre que CMAKE_BUILD_TYPE est défini à partir de la ligne de commande et qu’il est reconnu dans la configuration CMakeLists.txt.
Que se passe-t-il lorsque vous l’exécutez sur votre système avec votre version de CMake?