Optimizasyon olmadan nasıl derlenir -C0 kullanarak CMake


17

Ben kullanıyorum Bilimsel Linux (SL). Bir grup C ++ (.cpp) dosyaları kullanan bir proje derlemeye çalışıyorum.

Dizine user/project/Build, maketüm .cpp dosyalarını derlemek ve bağlamak için giriyorum . Sonra gitmek zorunda user/run/yazın ve sonra./run.sh values.txt

GDB ile hata ayıklama için, ben gitmek zorunda user/runsonra yazın ve gdb ../project/Build/bin/Projectben girin ve çalıştırmak için run -Project INPUT/inputfile.txt. Ancak, değişkenin değerini kullanarak yazdırmaya çalışıyorum p variablename.

Ancak mesajı alıyorum s1 = <value optimized out>. Çevrimiçi olarak biraz araştırma yaptım ve bunu -O0çözmek için optimizasyon olmadan derlemem gerekiyor gibi görünüyor . Ama buna nereden gireceğim? Içinde CMakeLists? Varsa, hangi CMakeLists? İçindeki project/Buildveya project/src/project?


Derleme türü DEBUG olarak ayarlandığında cmake'yi yeniden çalıştırmayı denediniz mi? ör. (Derleme dizininden)cmake -DCMAKE_BUILD_TYPE=DEBUG ..
steeldriver

1
Bu neden Stack Overflow'da yayınlanmadı?
Peter Mortensen

Yanıtlar:


10

Chip'in yanıtı yardımcı oldu, ancak SETsatırın üzerine yazdığından CMAKE_CXX_FLAGS_DEBUG, -gçalıştırılabilirimin hata ayıklama bilgisi olmadan oluşturulmasına neden olan varsayılanı kaldırdı . Ben hata ayıklama bilgisi ve -O0 optimizasyon (cmake sürüm 2.8.12.2) ile inşa edilmiş bir yürütülebilir almak için proje kaynak dizininde CMakeLists.txt küçük bir ek değişiklik yapmak gerekiyordu .

Eklemek -O0ve -getkin bırakmak için CMakeLists.txt dosyasına aşağıdakileri ekledim :

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

Bu -O0, CMake tarafından hata ayıklama için zaten kullanılan bayraklara optimizasyonu ekler ve yalnızca bir çapraz platform projesi kullanıyorsanız GCC derlemeleri için dahil edilir.



4

Bunu CMakeLists.txt dosyasına ekleyin (proje kaynak dizinindeki); derleme dizinindeki hiçbir şeye dokunmayın):

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

ve sonra

$ cmake -DCMAKE_BUILD_TYPE=Debug

çalışacak. Alternatif olarak, bunu CMakeLists.txt dosyasına eklemeniz yeterlidir:

SET(CMAKE_CXX_FLAGS "-O0")
SET(CMAKE_C_FLAGS "-O0")
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.