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

9

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

No diretório user/project/Build , eu digito make para compilar e vincular todos os arquivos .cpp. Eu então tenho que ir para user/run/ e então digite ./run.sh values.txt

Para depurar com o GDB, tenho que ir para user/run e, em seguida, digitar gdb ../project/Build/bin/Project e, para executar, insiro 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> . Fiz algumas pesquisas on-line e parece que preciso compilar sem otimizações usando -O0 para resolver isso. Mas onde eu entro nisso? No CMakeLists ? Em caso afirmativo, quais CMakeLists? O em project/Build ou project/src/project ?

    
por user4352158 28.02.2015 / 23:08

3 respostas

9

A resposta de Chip foi útil, no entanto, como a linha SET substituiu CMAKE_CXX_FLAGS_DEBUG , isso removeu o padrão -g , o que fez com que meu executável fosse construído 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 obter um executável construído com informações de depuração e -O0 optimizations (na versão 2.8.12.2 do cmake).

Adicionei o seguinte ao CMakeLists.txt para adicionar -O0 e deixar -g enabled:

# 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 -O0 de otimização aos sinalizadores já usados para depuração pelo CMake e somente é incluída nas compilações do GCC se você estiver usando um projeto de plataforma cruzada.

    
por 25.07.2015 / 02:59
2

Adicione isto 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

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

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
    
por 04.03.2015 / 17:30
2

Ou no momento da invocação:

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

e confirme com:

make VERBOSE=1

CMake 3.7.2, Ubuntu 17.04.

    
por 20.10.2017 / 07:07