LINUX.ORG.RU

Eclipse + Cmake


0

1

Сразу вопрос, это нормально ? Если это нормально то почему я не могу сделать так что бы у меня

1. Было две сборки Release/Debug из коробки

2. Были доступны исходники при импорте проекта.

Кто имел опыт? Весь интернет мне говорит что Eclipse не умеет из коробки привязывать сорсы к проекту при импорте из Makefile. Так и есть?


1. Сконфигурировать сборку проекта с консоли в отдельной директории.
2. Повторить пункт 1 для всех желаемых конфигураций (Release/Debug/etc).
3. Создать Makefile-проект.
4. Вместо импортирования просто добавить ссылку на корневую директорию с исходниками.
5. В настройках сборки проекта прописать пути к директориям для make, созданным в пункте 1.

Получаем сборку по горячей клавише, индексер, подсветку ошибок.

Dendy ★★★★★
()

Я активно использую Eclipse + CMake. Правда для удобства там применяется самописный shell-скрипт.

m0rph ★★★★★
()
Ответ на: комментарий от m0rph

Что делает скрипт ? По меня вообще ни как не втыкает делать описанные товарищем Dendy 5 шагов, потому что за два дня я повторил подобную процедуру много много раз, в следствии того, что вот этот Cmake писался с нуля и все еще продолжает видоизменяться. Я правда немного по другому делал. Но суть таже.

Cupper
() автор топика
Ответ на: комментарий от Cupper

Это конечно страшный костыль, велосипед без колес и пример как делать не надо, но другого способа удобно работать с CMake в Eclipse я не нашел. Скрипт выполняет запуск cmake (при необходимости) и make для out of source build'ов. Первым аргументом принимает имя директории, в которой предполагается произвести сборку. Тест на необходимость запустить cmake не претендует на идеалогическую верность, но со своей задачей справляется весьма успешно.

build.sh:

#!/bin/bash

if [[ $# -lt 2 ]]; then
	echo "CMake build helper script usage:"
	echo "    build.sh <directory> <cmake-options> [!] [make-options]"
	exit 1
fi

CMAKE_OPTIONS=
MAKE_OPTIONS=
CMAKE_PARSED=0

arguments=($@)
for ((i = 1; i < ${#arguments[@]}; i++)); do
	ARG=${arguments[$i]}
	if [[ $CMAKE_PARSED == 0 ]]; then
		if [[ ${ARG} == "!" ]]; then
			CMAKE_PARSED=1
		else
			if [ -z "$CMAKE_OPTIONS" ]; then
		    	CMAKE_OPTIONS="${ARG}"
			else
			    CMAKE_OPTIONS="$CMAKE_OPTIONS ${ARG}"
			fi
		fi
	else
		if [ -z "$MAKE_OPTIONS" ]; then
	    	MAKE_OPTIONS="${ARG}"
		else
		    MAKE_OPTIONS="$MAKE_OPTIONS ${ARG}"
		fi
	fi
done

echo "----------------------------------------"
echo "CMake build helper script"
echo "directory:     $1"
echo "CMake options: $CMAKE_OPTIONS"
echo "make options:  $MAKE_OPTIONS"
echo "----------------------------------------"


if [[ ! -d "$1" ]] || [[ -z $(ls "$1"/) ]] || [[ ! -f "$1/Makefile" ]]; then
	mkdir -p "$1"
	cd "$1"
	cmake ../ $CMAKE_OPTIONS

	if [ $? != 0 ]; then
		echo "CMake failed!"
		exit 1
	fi
else
	cd "$1"
fi

make $MAKE_OPTIONS

Естественно для его использования еще нужно правильно настроить проект: прописать запуск скрипта для каждого варианта конфигурации (debug/release/что-то еще). Запускается он с помощью следующей команды в настройках проекта (пример для debug версии):

${ProjDirPath}/build.sh ${ConfigName} -DCMAKE_BUILD_TYPE:STRING=Debug ! VERBOSE=1 -j8
До восклицательного знака идут аргументы для cmake, после него аргументы для make. VERBOSE=1 здесь присутствует чтобы не зашивать его в CMakeLists.txt (требуется для CDT индексера). Как я уже говорил, решение весьма корявое, задачу можно было бы решить более аккуратно, но данный вариант пока устраивает.

m0rph ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.