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?


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.



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")
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.