cmake ignore -D CMAKE_BUILD_TYPE = Déboguer

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?