Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программное обеспечение под *NIX системы > cmake


Автор: GrayCardinal 21.5.2008, 15:55
Перешёл на смаке.Душа ликует. Полностью отказался от AAP и Scons. Однако возникла трабла. 
Имею :
Цитата

add_library (gclib2 SHARED < файлы >)

Так вот. Каким макаром можно собрать означенную лайбу с отключенной оптимизацией (непонятно какой) и включенной отладкой ? (-g3)


Автор: nickless 22.5.2008, 17:00
Дебаг/релиз переключается обычно переменной CMAKE_BUILD_TYPE, типа
Код

cmake -DCMAKE_BUILD_TYPE=Debug


Флаги находятся в CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_DEBUG, еще можно добавлять их как дефайны в add_definitions()
Код

set(CMAKE_CXX_FLAGS_RELEASE     "-DNDEBUG")
set(CMAKE_CXX_FLAGS_DEBUG       "-UNDEBUG -g3")
add_definitions(-DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -D_REENTRANT -DQT_NO_STL)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -О2 -pipe")


Еще есть set_target_properties()
Код

set(ALL_LDFLAGS     "-Wl,--as-needed")
set_target_properties(${TARGET} PROPERTIES LINK_FLAGS "${ALL_LDFLAGS}")


Обычные переменные окружения вроде CXXFLAGS LDFLAGS он сам использует где положено. smile 

Сделай где-нибудь
Код

message("
Configuration
-------------
CMAKE_BUILD_TYPE        = ${CMAKE_BUILD_TYPE}
CXXFLAGS                = $ENV{CXXFLAGS}
CMAKE_CXX_FLAGS         = ${CMAKE_CXX_FLAGS}
LDFLAGS                 = $ENV{LDFLAGS}
CMAKE_EXE_LINKER_FLAGS  = ${CMAKE_EXE_LINKER_FLAGS}
CMAKE_INSTALL_PREFIX    = ${CMAKE_INSTALL_PREFIX}
")

будет виднее, что там задефайнено...

Автор: GrayCardinal 22.5.2008, 18:27
nickless, 
Блакогадрю, очень помог  smile 

Автор: En_t_end 23.6.2008, 20:14
Кто генерит make'и данной тулзой расскажите о минусах.

Автор: nickless 24.6.2008, 19:42
Цитата(En_t_end @  23.6.2008,  19:14 Найти цитируемый пост)
расскажите о минусах

Мне пока не приходилось сталкиватся с большими минусами, cmake умеет достаточно для моих целей (в scons например пришлось немного дописывать и допиливать).
Из минусов, на вскидку
1. синтаксис их языка простой, но об него ИМХО можно сломать пальцы
2. сложно/не удобно сделать что-либо не связаное с компилированием, линковкой, установкой итд. В принципе это правильно, но иногда хочется добавить вывод какой-нибудь интересной статистики итд. smile 

Автор: En_t_end 25.6.2008, 18:14
А существует ли толковая документация по сабжу ? man и doc'и от создателей читал.

Автор: nickless 28.6.2008, 21:32
Есть еще книга, но чем она лучше всей остальной документации не знаю, документации, вики и примеры билд-скриптов из http://www.cmake.org/Wiki/CMake_Projects мне вполне хватает.

Автор: En_t_end 29.6.2008, 16:22
nickless, tnx

Автор: Lych 24.7.2008, 11:14
Привет всем!

Столкнулся с такой проблемой:
  Нужно чтобы CMake добавлял разные пути результата сборки проекта для Debug и Release.

Нашел только как задать этот параметр для всех целей:
Код

set( LIBRARY_OUTPUT_PATH $ENV{IVRoot}/_Win32_Debug )


При этом он сам добавляет в конец .../_Win32_Debug /Debug/...., .../_Win32_Debug /Release/.... и т. д.

Как сделать так, чтобы он сам не дописывал путь, а в Debug и Release были разные пути, те которые нужны мне?

Автор: bilbobagginz 24.7.2008, 11:42
я так понимаю что вы работаете с Windows. проблема, с которой вы пытаетесь бороться - зависит от ОС, и среды. вы ошиблись разделом.

Автор: Lych 24.7.2008, 11:54
to bilbobagginz

тема то CMake?
я использую CMake как раз для того чтобы не зависеть от среды и оси

не только Windows...проект кросплатформенный...
в часности для Linuх пути должны быть:
.../_Linux32_Debug /
.../_Linux32_Release/


Автор: bilbobagginz 24.7.2008, 18:23
вопрос: а почему вам не подходит так:
Код

set( LIBRARY_OUTPUT_PATH $ENV{IVRoot}/_Win32_ )

?

Автор: Lych 25.7.2008, 08:30
Из-за особенностей проекта. Дебажные и релизные модули после компиляции должны находится в строго определенных различных местах, а данный способ задает этот путь сразу для всех...(в MSVC еще и приписывая окончания которые непонятно как убрать)

Автор: bilbobagginz 25.7.2008, 13:42
я не работаю с cmake, но я понимаю что там идут разные переменные.
LIBRARY_OUTPUT_PATH - это видимо переменная, на основе которой создаются др. каталоги.
возможно эти каталоги создаются после создания дополнительных переменных, напр.
set (LIBRARY_OUTPUT_PATH_$(ARCH_OPSYS_DEBUG), $(LIBRARY_OUTPUT_PATH)/Debug)
set (LIBRARY_OUTPUT_PATH_$(ARCH_OPSYS_RELEASE), $(LIBRARY_OUTPUT_PATH)/Release)
т.е. может быть создали 2 переменных 
LIBRARY_OUTPUT_PATH_INTEL_LINUX_DEBUG
LIBRARY_OUTPUT_PATH_INTEL_LINUX_RELEASE

Думаю тебе надо немного поковыряться в этом направлении.

Автор: kamre 18.8.2008, 23:28
Цитата(Lych @ 25.7.2008,  08:30)
Из-за особенностей проекта. Дебажные и релизные модули после компиляции должны находится в строго определенных различных местах, а данный способ задает этот путь сразу для всех...(в MSVC еще и приписывая окончания которые непонятно как убрать)

Для генерации makefile нет поддержки одновременно и Release, и Debug. Поэтому просто делаются сборки в разных местах. Типа такого:
Код

mkdir build-debug
cd build-debug
cmake -DCMAKE_BUILD_TYPE=Debug path/to/source
make

cd ..

mkdir build-release
cd build-release
cmake -DCMAKE_BUILD_TYPE=Release path/to/source
make


А вот при генерации MSVC проектов все кофигурации впихиваются уже в один файл проекта, и раскладываются по соответсвующим директориям типа release/debug. Как их поменять я пока не разбирался. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)