web-dev-qa-db-fra.com

Comment compiler sans optimisations -O0 à l'aide de cmake

J'utilise Scientifique Linux (SL). J'essaie de compiler un projet qui utilise un groupe de fichiers C++ (.CPP).

Dans le répertoire user/project/Build, Je saisis make pour compiler et relier tous les fichiers .cpp. Je dois ensuite aller à user/run/, puis tapez ./run.sh values.txt

Pour déboguer avec GDB, je dois aller à user/run, puis tapez gdb ../project/Build/bin/Project et à courir, j'entre run -Project INPUT/inputfile.txt. Cependant, j'essaie d'imprimer la valeur de la variable à l'aide de p variablename.

Cependant, je reçois le message s1 = <value optimized out>. J'ai fait des recherches en ligne et il semble que j'ai besoin de compiler sans optimisations en utilisant -O0 Pour résoudre ce problème. Mais où dois-je entrer ça? Dans le CMakeLists? Si oui, quels cmakelistes? Celui de project/Build ou project/src/project?

19
user4352158

La réponse de la puce a été utile, cependant depuis la ligne SET la ligne écrasante CMAKE_CXX_FLAGS_DEBUG cela a supprimé le -g Par défaut, ce qui a entraîné une construction de mon exécutable sans informations de débogage. Je devais faire une petite modification supplémentaire à Cmakelists.txt dans le répertoire source de projet pour obtenir un exécutable construit avec des informations de débogage et-O0 Optimisations (sur la version cuma 2.8.12.2).

J'ai ajouté ce qui suit à Cmakelists.txt pour ajouter -O0 et part -g activée:

# 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 le -O0 Optimisation des indicateurs déjà utilisés pour débogage par CMAKE et est uniquement inclus pour les bâtiments de la GCC si vous utilisez un projet Cross Platform.

11
dan

Ou au temps d'invocation:

cmake -DCMAKE_BUILD_TYPE=DEBUG \
      -DCMAKE_C_FLAGS_DEBUG="-g -O0" \
      -DCMAKE_CXX_FLAGS_DEBUG="-g -O0"

puis confirmez avec:

make VERBOSE=1

pour afficher les commandes de construction de GCC comme expliqué à l'adresse suivante: https://stackoverflow.com/questions/5820303/how-do--force-make-gcc-to-show-me-the-commands

Testé sur Ubuntu 17.04, CMAKE 3.7.2.

Ajoutez ceci à cmakelists.txt (celui dans le répertoire source de 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. Vous pouvez également simplement ajouter ceci à cmakelists.txt:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
4
Chip Christian