Comment compiler sans optimisations -O0 en utilisant CMake


17

J'utilise Scientific Linux (SL). J'essaie de compiler un projet qui utilise un tas de fichiers C ++ (.cpp).

Dans le répertoire user/project/Build, j'entre makepour compiler et lier tous les fichiers .cpp. Je dois ensuite aller user/run/et taper./run.sh values.txt

Pour déboguer avec GDB, je dois aller user/runpuis taper gdb ../project/Build/bin/Projectet pour exécuter, j'entre run -Project INPUT/inputfile.txt. Cependant, j'essaie d'imprimer la valeur de la variable en utilisant p variablename.

Cependant, je reçois le message s1 = <value optimized out>. J'ai fait quelques recherches en ligne, et il semble que je doive compiler sans optimisations à l'aide -O0de résoudre ce problème. Mais où dois-je entrer cela? Dans le CMakeLists? Si oui, quelles CMakeLists? Celui dans project/Buildou project/src/project?


Avez-vous essayé de réexécuter simplement cmake avec le type de build défini sur DEBUG? par exemple (depuis le répertoire Build)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver

1
Pourquoi cela n'a-t-il pas été publié sur Stack Overflow?
Peter Mortensen

Réponses:


10

La réponse de Chip a été utile, cependant, car la SETligne a écrasé CMAKE_CXX_FLAGS_DEBUGcela, ce qui a supprimé la -gvaleur par défaut, ce qui a provoqué la construction de mon exécutable sans informations de débogage. J'ai dû apporter une petite modification supplémentaire à CMakeLists.txt dans le répertoire source du projet pour obtenir un exécutable construit avec des informations de débogage et des -O0 optimisations (sur cmake version 2.8.12.2).

J'ai ajouté ce qui suit à CMakeLists.txt pour ajouter -O0et laisser -gactivé:

# Add -O0 to remove optimizations when using gcc
IF(CMAKE_COMPILER_IS_GNUCC)
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
    set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
ENDIF(CMAKE_COMPILER_IS_GNUCC)

Cela ajoute l' -O0optimisation aux indicateurs déjà utilisés pour le débogage par CMake et n'est inclus pour les générations GCC que si vous utilisez un projet multiplateforme.



4

Ajoutez ceci à CMakeLists.txt (celui du répertoire source du projet; ne touchez à rien dans le répertoire de construction):

SET(CMAKE_CXX_FLAGS_DEBUG "-O0")
SET(CMAKE_C_FLAGS_DEBUG "-O0")

puis

$ cmake -DCMAKE_BUILD_TYPE=Debug

marchera. Alternativement, ajoutez simplement ceci à CMakeLists.txt:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.