J'essaye juste de construire un projet cmake en mode debug pour permettre 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
- n'est pas passé à 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 Principal. En outre, j’ai ajouté variable_watch(CMAKE_BUILD_TYPE)
à mon CMakeLists.txt
principal et la valeur à cet endroit 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"
a finalement trouvé le problème pour moi. Dans un fichier CMakeLists.txt
- j'ai trouvé quelque chose comme ça:
SET( CMAKE_BUILD_TYPE Release ... FORCE )
Cela remplace tous les paramètres 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 compiler identification is GNU 4.8.2
-- The CXX compiler identification is GNU 4.8.2
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler 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 en cours de définition à 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?