Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Многопапковый проект на cmake, Проблема со сброркой бинарников в bin 
V
    Опции темы
navrocky
  Дата 27.8.2009, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 21.2.2008
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Породил многопапковый проект на cmake под линем примерно такой структуры:

Код

/myproj
/myproj/client
/myproj/server
/myproj/libs
/myproj/libs/staticlib1
/myproj/libs/staticlib2


Вот содержимое корневого CMakeLists.txt

Код

project(myproj)

cmake_minimum_required(VERSION 2.6)

add_subdirectory(libs)
add_subdirectory(client bin)
add_subdirectory(server bin)


Под линем собирается нормально с версией cmake 2.6-patch2, под винду поставил cmake 2.6-patch4. Пишет ошибку, что мол нельзя собирать все подпроекты в одну папку bin. Пишет:

Код

CMake Error at CMakeLists.txt:8 (add_subdirectory):
  The binary directory

    C:/temp/myproj/bin

  is already used to build another source directory, so it cannot be used to
  build source directory

    C:/temp/myproj/server

  Specify a unique binary directory name.

...


Судя по всему я сделал проект не правильно :(. Вот и вопрос: а как правильно делать такие проекты?

ЗЫ Мне надо чтобы все библиотеки и бинарники собрались в папку bin для упрощения запуска

Это сообщение отредактировал(а) navrocky - 27.8.2009, 16:38
PM MAIL   Вверх
navrocky
Дата 31.8.2009, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 21.2.2008
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Отвечу сам себе  smile 

Для сборки в сложном проекте в одну папку надо сделать следующее:

В корневом CMakeLists.txt прописать:
Код
set(BINDIR ${CMAKE_BINARY_DIR}/bin)

В каждом вложенном подпроекте, который должен скомпилиться в папку bin в случае исполняемого файла добавить:
Код
set_target_properties(${TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${BINDIR})

В случае DLL:
Код
set_target_properties(${TARGET} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${BINDIR})

${TARGET} - имя цели

В итоге мы получаем сборку всех экзешников большого проекта и длл'ек в папку bin, что упрощает запуск скомпиленных программ.
PM MAIL   Вверх
korbian
Дата 31.8.2009, 15:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



navrocky, а intermediate файлы там же складируются?


--------------------
korbian ©
PM   Вверх
navrocky
Дата 31.8.2009, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 21.2.2008
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Мусорник отдельно smile А если запускать еще так:
Код

mkdir release
cd release
cmake ..\src
make


То весь хлам уходит в release отдельно от исходников. И папка bin там же будет
PM MAIL   Вверх
korbian
Дата 31.8.2009, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Цитата(navrocky @  31.8.2009,  17:27 Найти цитируемый пост)
То весь хлам уходит в release отдельно от исходников. И папка bin там же будет

не совсем понял. мне кажется, было бы удобно так:
Код

cmake ./src
make
 или так:
Код

cmake ./src/project1
make

и в корне появилась бы директория bin, в которую сложились бы исполняемые файлы и директория swap, в которую бы сложился "хлам".



--------------------
korbian ©
PM   Вверх
navrocky
Дата 31.8.2009, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 21.2.2008
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Если мы хотим такую структуру проекта, то так как я написал:
Код
project
project/release
project/release/bin
project/debug
project/debug/bin
project/src

В вашем варианте хлам ложится в корневую папку. Не понятно почему он должен ложиться в swap...

Вот с официально фака про такой подход

Это сообщение отредактировал(а) navrocky - 31.8.2009, 16:46
PM MAIL   Вверх
korbian
Дата 1.9.2009, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Цитата(navrocky @  31.8.2009,  17:44 Найти цитируемый пост)
Не понятно почему он должен ложиться в swap...

выработалась у меня уже привычка такая! smile
создаю в корне директорию bin, в которой создаю директории release и debug для бинарных файлов. по такому же принципу создаю директорию swap для временных файлов. 

Я СЧИТАЮ, что старшей в иерархии должна быть директория для бинарных файлов, а не директория для некоторой их конфигурации. Ну а директория swap нужна для удобства, чтобы "грохнув" её очищать весь воркспейс от "скверны". smile


--------------------
korbian ©
PM   Вверх
navrocky
Дата 1.9.2009, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 21
Регистрация: 21.2.2008
Где: Ростов-на-Дону

Репутация: нет
Всего: нет



Может быть вы и правы.. Но как тогда bin положить выше корня сборки?
Может так:
Код
set(BINDIR ${CMAKE_BINARY_DIR}/../../bin)


Но опять-же в эту папку свалятся и release и debug бинарники, что не есть хорошо...

Это сообщение отредактировал(а) navrocky - 1.9.2009, 13:34
PM MAIL   Вверх
korbian
Дата 1.9.2009, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 336
Регистрация: 20.2.2007
Где: Penza

Репутация: 1
Всего: 14



Цитата(navrocky @  1.9.2009,  14:32 Найти цитируемый пост)
Может быть вы и правы.. Но как тогда bin положить выше корня сборки?

попробуйте так:
Код

set(BINDIR ${CMAKE_BINARY_DIR}/../../bin/${CMAKE_BUILD_TYPE})



--------------------
korbian ©
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0674 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.