затмение CDT: восстановление зависимого проекта - PullRequest
4 голосов
/ 26 июля 2011

Я работаю над проектом C ++ с eclipse Indigo + CDT, работающим на Linux

Он состоит из проекта для библиотеки и проекта с юнит-тестами для этой библиотеки.
Очевидно, что второй проект зависит от первого.
Оба проекта используют внешний застройщик

Но когда я изменяю заголовок первого проекта, он не перестраивает тестовый проект. И я не могу заставить это сделать это ... Он просто перекомпоновает второй проект, даже если заголовок включен в тестовый проект. Это очень раздражает, потому что у меня часто бывают рабочие сборки, когда я работаю с библиотекой, затем в какой-то момент я делаю полную перестройку и вижу множество ошибок, по поводу вещей, которые я сделал 30 минут назад!

пример вывода консоли глобального построения CDT:

**** Build of configuration Debug for project libxxx ****

make -j all 
Building file: ../foo.cpp
Invoking: GCC C++ Compiler
ccache g++ -I"/home/foke/workspaces/cpp/libxxx/include" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"foo.d" -MT"foo.d" -o "foo.o" "../foo.cpp"
Finished building: ../foo.cpp

Building target: libxxx.a
Invoking: GCC Archiver
ar -r  "libxxx.a"  ./foo.o  ./src/yyy.o  ./src/detail/zzz.o   
ar: creating libxxx.a
Finished building target: libxxx.a


**** Build Finished ****

**** Build of configuration Debug for project libxxx_tests ****

make -k -j all 
Building target: libxxx_tests
Invoking: Cross G++ Linker
g++ -L"/home/foke/workspaces/cpp/libxxx/Debug" -o "libxxx_tests"  ./main.o ./aaa.o  ./tests/bbb.o ./tests/ccc.o ./tests/ddd.o   -lboost_unit_test_framework -lxxx
Finished building target: libxxx_tests


**** Build Finished ****

1 Ответ

4 голосов
/ 26 августа 2011

Если вы привыкли к последним версиям MS Visual Studio, вам следует очистить место на столе и пометить его гигантским «Х» - это неизбежно, когда ваш кулак и, возможно, даже ваша голова будут биться в отчаянии.при использовании eclipse / CDT.

Eclipse имеет свой собственный механизм зависимостей, который почти ничего не делает, но, к счастью, модуль CDT имеет свой собственный механизм зависимостей, который пытается делать то, что вы хотите.Чтобы установить зависимости проекта, перейдите по следующему адресу:

Project-->Properties-->C/C++ General-->Paths and Symbols-->References

Итак, в вашем примере вы должны перейти к свойствам проекта для «libxxx_tests» и выбрать «libxxx.a» в качестве зависимости.что вы также можете использовать эту страницу для установки порядка библиотек, что может быть важным шагом в зависимости от сложности вашего проекта.

...