Настройка Eclipse для работы с cmake проектами
В отличии от NetBeans, где достаточно всего лишь создать проект из существующего Makefile, Eclipse требует некоторой настройки. В этой статье я подробно разберу настройку отладчика и компилятора.
Предположим, что у вас есть такой, вполне обычный CMakeLists.txt.
Теперь давайте создадим проект Eclipse. Нажимайте File > New > Project. В появившимся мастере выбирайте C++ Project. Далее как обычно: вводите название, выбирайте Toolchain.

Теперь откройте окно Make Target, проследуя Window > Show View > Make Target. Оно появится справа от главного окна. Выберете в этом окне корневую директорию для CMake, именно она станет его рабочей директорией.

Теперь:
- кликайте правой кнопкой мыши по выбранной папке и в контекстном меню нажимайте "New...".
- В появившемся диалоге, уберите две галочки "Same as the target name" и "Use builder settings".
Затем заполните форму:
- Target Name: Cmake Release
- Make Target: (оставить пустым)
- Build command:
cmake -E chdir Release/ cmake -G "Unix Makefiles" ../ -DCMAKE_BUILD_TYPE:STRING=Release
- Жмём Ок.

Тоже самое нужно сделать для цели Debug. Target Name, естественно будет Cmake Debug, а Build command:
Как вы уже наверняка поняли, в директории проекта необходимо создать директории, в которых будут собираться цели:
Теперь кликните правой кнопкой мыши по созданной цели и нажмите Build Target. Eclipse зайдёт в рабочую директорию и выполнит там команду "cmake ../". Естественно это действие нужно будет повторять после каждой правки CMakeLists.txt
Теперь необходимо настроить, собственно сам Builder.
- В левом меню найдите свой проект
- Вызовите контекстное меню правым щелчком мыши и нажмите Properties
- В появившемся окне выберите слева в списке, пункт "C/C++ Build"
- В верхнем выпадающем меню, выберете конфигурацию "Release" (если такой нет, создайте в этом же окошке)
- Снимите галочки "Use default build command" и "Generate make files automatically"
В активизировавшемся поле ввода "Build command", укажите:

Переходим на вкладку Behaviour. Там всё должно быть вот так:

Тоже самое следует повторить и для конфигурации Debug, с той лишь разницей, что в поле "Build command" я обычно указываю опцию VERBOSE=1, чтобы получать подробный лог компиляции. Поле у меня при этом выглядит вот так:
Стоит заметить, что после каждого изменения файла CMakeLists.txt необходимо обновить цель. Для этого нужно щёлкнуть на ней правой кнопкой мыши и в контекстном меню нажать "Rebuild Last Target".
Компиляция и дебагинг
Как выяснилось, просто иметь цели компиляции не достаточно. Нужно ещё настроить соответствующие кнопки на верхней панели. Начнём с самого интересного - c Debug`а.
- Найдите на верхней панели иконку с маленьким зеленоватым жучком и нажмите на стрелку вниз рядом с ним.
- В выпадающем меню выберете "Debug Configurations"
- В появившемся окне, в списке слева выберете пункт "C/C++ Application" и кликните по нему правой кнопкой мыши.
- Далее "New" и это создаст вам новый профиль отладки для текущего приложения в проекте.

Далее нажимайте кнопку "Browse", рядом с полем Project и выбирайте проект, с которым будете работать. После этого нажимает "Search Project" и там вы должны увидеть исполняемый файл, который получается после компиляции. Выбирайте его.
Стоит отметить, что бывали случаи, когда путь на выходной бинарник, в поле C/C++ Application по умолчанию указывал куда-то в CMakeFiles. Забирать его от туда не очень удобно, поэтому не стесняйтесь указывать что-то вроде "Debug/weathercollector" :-)
Теперь опять находим в левом фрейме Project Explorer свой проект, кликаем по нему правой кнопкой мыши, в выпавшем меню находим пункт "Debug as" и выбираем только что созданный профиль дебагинга.
В верхнем меню, нажмите кнопку с иконкой молоточка, в выпадающем меню которого можно найти созданные ранее профили Debug и Release.
Всё, теперь можно нажимать на иконку с зелёным жучком и пользоваться всеми прелестями отладчика Eclipse.

Следуя тому же принципу, нужно создать и назначить профили для кнопок Run и Build.
nEcdyGgx 13 Augustа в 18:26 #
555
nEcdyGgx 13 Augustа в 18:27 #
555
nEcdyGgx 13 Augustа в 18:27 #
555
nEcdyGgx 13 Augustа в 18:27 #
555
nEcdyGgx 13 Augustа в 18:27 #
555
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 2+727-727-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 3+727-727-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 3*2>(0+5+727-727) --
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 2+825-825-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 3+825-825-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:27 #
-1 OR 3*2>(0+5+825-825)
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 2+852-852-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 3+852-852-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 3*2>(0+5+852-852) --
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 2+191-191-1=0+0+0+1 or 'c3vKzNTL'='
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 3+191-191-1=0+0+0+1 or 'c3vKzNTL'='
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:27 #
-1' OR 3*2>(0+5+191-191) or 'c3vKzNTL'='
nEcdyGgx 13 Augustа в 18:27 #
-1" OR 2+800-800-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:27 #
-1" OR 3+800-800-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:27 #
-1" OR 3*2
nEcdyGgx 13 Augustа в 18:27 #
-1" OR 3*2>(0+5+800-800) --
nEcdyGgx 13 Augustа в 18:27 #
if(now()=sysdate(),sleep(15),0)
nEcdyGgx 13 Augustа в 18:27 #
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
nEcdyGgx 13 Augustа в 18:27 #
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
nEcdyGgx 13 Augustа в 18:27 #
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
nEcdyGgx 13 Augustа в 18:27 #
-1; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:27 #
-1); waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:27 #
1 waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:27 #
u2DG8GgB'; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:27 #
-5 OR 459=(SELECT 459 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:27 #
-5) OR 610=(SELECT 610 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:27 #
-1)) OR 863=(SELECT 863 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:27 #
4RDvhKNL' OR 209=(SELECT 209 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:27 #
XJsjMcSk') OR 947=(SELECT 947 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:27 #
AMBH55ep')) OR 472=(SELECT 472 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:27 #
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
nEcdyGgx 13 Augustа в 18:27 #
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
nEcdyGgx 13 Augustа в 18:27 #
1'"
nEcdyGgx 13 Augustа в 18:27 #
@@4kM5O
nEcdyGgx 13 Augustа в 18:37 #
555
nEcdyGgx 13 Augustа в 18:40 #
555
nEcdyGgx 13 Augustа в 18:40 #
555
nEcdyGgx 13 Augustа в 18:40 #
555
nEcdyGgx 13 Augustа в 18:40 #
555
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 2+707-707-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 3+707-707-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 3*2>(0+5+707-707) --
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 2+471-471-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 3+471-471-1=0+0+0+1
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 3*2
nEcdyGgx 13 Augustа в 18:40 #
-1 OR 3*2>(0+5+471-471)
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 2+929-929-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 3+929-929-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 3*2>(0+5+929-929) --
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 2+971-971-1=0+0+0+1 or 'v0yIKrVH'='
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 3+971-971-1=0+0+0+1 or 'v0yIKrVH'='
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 3*2
nEcdyGgx 13 Augustа в 18:40 #
-1' OR 3*2>(0+5+971-971) or 'v0yIKrVH'='
nEcdyGgx 13 Augustа в 18:40 #
-1" OR 2+686-686-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:40 #
-1" OR 3+686-686-1=0+0+0+1 --
nEcdyGgx 13 Augustа в 18:40 #
-1" OR 3*2
nEcdyGgx 13 Augustа в 18:40 #
-1" OR 3*2>(0+5+686-686) --
nEcdyGgx 13 Augustа в 18:40 #
if(now()=sysdate(),sleep(15),0)
nEcdyGgx 13 Augustа в 18:40 #
0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z
nEcdyGgx 13 Augustа в 18:40 #
0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z
nEcdyGgx 13 Augustа в 18:41 #
(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/
nEcdyGgx 13 Augustа в 18:41 #
-1; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:41 #
-1); waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:41 #
1 waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:41 #
0TLbvoOU'; waitfor delay '0:0:15' --
nEcdyGgx 13 Augustа в 18:41 #
-5 OR 437=(SELECT 437 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:41 #
-5) OR 944=(SELECT 944 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:41 #
-1)) OR 276=(SELECT 276 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:41 #
XIen1YxV' OR 282=(SELECT 282 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:41 #
6CzvC9QQ') OR 329=(SELECT 329 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:41 #
nL9lvtPS')) OR 864=(SELECT 864 FROM PG_SLEEP(15))--
nEcdyGgx 13 Augustа в 18:41 #
555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)
nEcdyGgx 13 Augustа в 18:41 #
555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'
nEcdyGgx 13 Augustа в 18:41 #
1'"
nEcdyGgx 13 Augustа в 18:41 #
@@4dLJq
nEcdyGgx 13 Augustа в 18:54 #
555
nEcdyGgx 13 Augustа в 18:54 #
555