Як компілювати без оптимізацій -O0 за допомогою CMake


17

Я використовую Scientific Linux (SL). Я намагаюся скласти проект, який використовує купу файлів C ++ (.cpp).

У довідник user/project/Buildя ввожу makeкомпілювати і зв’язувати всі файли .cpp. Тоді я повинен перейти, user/run/а потім набрати./run.sh values.txt

Щоб налагодити GDB, я мушу перейти, user/runа потім набрати gdb ../project/Build/bin/Projectта запустити, введіть run -Project INPUT/inputfile.txt. Однак я намагаюся роздрукувати значення змінної за допомогою p variablename.

Однак я отримую повідомлення s1 = <value optimized out>. Я провів деякі дослідження в Інтернеті, і, здається, мені потрібно компілювати без оптимізацій, використовуючи -O0для вирішення цього питання. Але куди я це входжу? У CMakeLists? Якщо так, які CMakeLists? Той, що знаходиться в project/Buildабо project/src/project?


Ви спробували просто запустити cmake знову з типом збірки, встановленим на DEBUG? наприклад (з каталогу Build)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver

1
Чому це не було розміщено на переповнюванні стека?
Пітер Мортенсен

Відповіді:


10

Відповідь чіпа була корисною, однак, оскільки SETрядок, яку перезаписали, CMAKE_CXX_FLAGS_DEBUGце видалило за -gзамовчуванням, що спричинило побудову мого виконуваного файлу без інформації про налагодження. Мені потрібно було внести невелику додаткову модифікацію в CMakeLists.txt у каталозі джерел проекту, щоб отримати виконаний виконуваний файл з інформацією про налагодження та -O0 оптимізаціями (на версії cmake 2.8.12.2).

Я додав у CMakeLists.txt наступне, щоб додати -O0та залишити -gввімкненим:

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

Це додає -O0оптимізацію до прапорів, які вже використовувались для налагодження CMake і включається лише для складання GCC, якщо ви випадково використовуєте проект крос-платформи.


8

Або під час виклику:

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

а потім підтвердіть за допомогою:

make VERBOSE=1

показати команди збірки GCC, як пояснено на веб-сторінці : /programming/5820303/how-do-i-force-make-gcc-to-show-me-the-commands

Тестовано на Ubuntu 17.04, CMake 3.7.2.


4

Додайте це до CMakeLists.txt (той, який знаходиться у каталозі джерела проекту; нічого не торкайтеся у каталозі збірки):

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

і потім

$ cmake -DCMAKE_BUILD_TYPE=Debug

буду працювати. Крім того, просто додайте це до CMakeLists.txt:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.