Como compilar sem otimizações -O0 usando o CMake

17

Estou usando o Scientific Linux (SL). Estou tentando compilar um projeto que usa um monte de arquivos C ++ (.cpp).

No diretório user/project/Build, entro makepara compilar e vincular todos os arquivos .cpp. Eu então tenho que ir user/run/e digitar./run.sh values.txt

Para depurar com o GDB, eu tenho que ir user/rune digitar gdb ../project/Build/bin/Projecte executar, eu entro run -Project INPUT/inputfile.txt. No entanto, estou tentando imprimir o valor da variável usando p variablename.

No entanto, recebo a mensagem s1 = <value optimized out>. Eu fiz algumas pesquisas online e parece que preciso compilar sem otimizações -O0para resolver isso. Mas onde eu entro nisso? No CMakeLists? Se sim, qual CMakeLists? Aquele em project/Buildou project/src/project?

user4352158
fonte
Você já tentou simplesmente executar o cmake novamente com o tipo de compilação definido como DEBUG? por exemplo (no diretório Build)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver 28/02
11
Por que isso não foi publicado no Stack Overflow?
Peter Mortensen

Respostas:

10

A resposta de Chip foi útil, no entanto, uma vez que a SETlinha substituiu CMAKE_CXX_FLAGS_DEBUGisso, removeu o -gpadrão que causou a criação do meu executável sem informações de depuração. Eu precisava fazer uma pequena modificação adicional no CMakeLists.txt no diretório de origem do projeto para criar um executável com informações e -O0 otimizações de depuração (no cmake versão 2.8.12.2).

Adicionei o seguinte ao CMakeLists.txt para adicionar -O0e deixar -gativado:

# 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)

Isso adiciona a -O0otimização aos sinalizadores já usados ​​para depuração pelo CMake e só é incluído para compilações do GCC se você estiver usando um projeto de plataforma cruzada.

dan
fonte
8

Ou no momento da invocação:

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

e depois confirme com:

make VERBOSE=1

para mostrar os comandos de construção do GCC, conforme explicado em: /programming/5820303/how-do-i-force-make-gcc-to-show-me-the-commands

Testado no Ubuntu 17.04, CMake 3.7.2.

Ciro Santilli adicionou uma nova foto
fonte
4

Adicione isso ao CMakeLists.txt (aquele no diretório de origem do projeto; não toque em nada no diretório de construção):

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

e depois

$ cmake -DCMAKE_BUILD_TYPE=Debug

vai funcionar. Como alternativa, basta adicionar isso ao CMakeLists.txt:

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