Używam Scientific Linux (SL). Próbuję skompilować projekt korzystający z wielu plików C ++ (.cpp).
W katalogu user/project/Build
wchodzę, make
aby skompilować i połączyć wszystkie pliki .cpp. Następnie muszę przejść do user/run/
i wpisać./run.sh values.txt
Aby debugować za pomocą GDB, muszę przejść do, user/run
a następnie wpisać gdb ../project/Build/bin/Project
i uruchomić, wchodzę run -Project INPUT/inputfile.txt
. Próbuję jednak wydrukować wartość zmiennej za pomocą p variablename
.
Jednak dostaję wiadomość s1 = <value optimized out>
. Przeprowadziłem badania online i wydaje się, że muszę je skompilować bez optymalizacji, -O0
aby rozwiązać ten problem. Ale gdzie mam to wprowadzić? W CMakeLists
? Jeśli tak, to które CMakeLists? Ten w project/Build
lub project/src/project
?
źródło
cmake -DCMAKE_BUILD_TYPE=DEBUG ..
Odpowiedzi:
Odpowiedź Chipa była pomocna, jednak ponieważ
SET
wiersz nadpisałCMAKE_CXX_FLAGS_DEBUG
to usunął-g
domyślną, co spowodowało, że mój plik wykonywalny został zbudowany bez informacji o debugowaniu. Potrzebowałem drobnej dodatkowej modyfikacji pliku CMakeLists.txt w katalogu źródłowym projektu, aby uzyskać plik wykonywalny zbudowany z informacjami o debugowaniu i-O0
optymalizacjami (w cmake w wersji 2.8.12.2).Dodałem następujące do CMakeLists.txt, aby dodać
-O0
i pozostawić-g
włączone:Dodaje to
-O0
optymalizację do flag używanych już do debugowania przez CMake i jest uwzględniane tylko w kompilacjach GCC, jeśli używasz projektu wieloplatformowego.źródło
Lub w czasie wywołania:
a następnie potwierdź za pomocą:
aby wyświetlić polecenia kompilacji GCC, jak wyjaśniono na stronie : /programming/5820303/how-do-i-force-make-gcc-to-show-me-the-commands
Testowane na Ubuntu 17.04, CMake 3.7.2.
źródło
Dodaj to do CMakeLists.txt (ten w katalogu źródłowym projektu; nie dotykaj niczego w katalogu kompilacji):
i wtedy
będzie działać. Alternatywnie po prostu dodaj to do CMakeLists.txt:
źródło