CMake основное использование - PullRequest
1 голос
/ 08 мая 2011

Я пытаюсь собрать свою библиотеку с помощью CMake.Я работаю над CMakeLists.txt.

Я хочу иметь возможность сделать следующее:

У меня есть каталоги с именем

include
src

Тогда внутри них естьэто папка AguiИ в этой папке находятся подпапки библиотеки.

Так далеко от того, что я собрал:

Мне нужно будет сделать:

set(AGUI_SOURCES
src/Agui/Rectangle.cpp
src/Agui/xxx.cpp (and so on)
)

ТогдаЯ думаю, что нужно сделать:

include_directories(./include)

И тогда я не совсем уверен.

Я знаю, что add_library будет участвовать, но я не уверен, как.

Дело в том, что я хочу создать 2 варианта: DLL или статический.

Если это DLL, то необходимо определить AGUI_BUILD_DLL.

Итак, основываясь на этой информации:

  1. Я на правильном пути?
  2. Как мне создать параметры
  3. Что мне добавить в add_library
  4. Как добавить препроцессор AGUI_BUILD_DLL, еслипользователю нужна версия DLL?

Если можно ответить на какой-либо из них или на все из них, я был бы очень признателен.

Спасибо

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

Я бы порекомендовал взглянуть на учебник CMake , который охватывает добавление исполняемых файлов, библиотек, системный анализ и т. Д. Команда cmake также самостоятельно документирует, поэтому при вводе командной строки,

cmake --help-command add_library

даст вам документацию для команды add_library. Вы можете использовать команды --help для получения полного списка всей документации по командам CMake. Таким образом, вы можете использовать команду option, чтобы добавить опцию для построения общего или статического, и использовать команду add_definitions, чтобы добавить определение препроцессора.

Например,

option(BUILD_SHARED "Build shared libraries" OFF)
if(BUILD_SHARED)
  add_definitions(-DAGUI_BUILD_DLL)
  add_library(agui SHARED ${AGUI_SOURCES})
else()
  add_library(agui STATIC ${AGUI_SOURCES})
endif()

Вы должны отметить, что targetName_EXPORTS будет определен при сборке библиотеки, и поэтому может использоваться в логике declspec. Это делается CMake и также полезно при использовании поддержки видимости в GCC в системах Unix.

0 голосов
/ 08 мая 2011
  1. Может быть, не знаю:)
  2. ВАРИАНТ (AGUI_BUILD_DLL "Сборка библиотеки Agui DLL" ВЫКЛ) где-то в начале CMakeLists.txt. Вы можете захотеть использовать ON вместо OFF - зависит от того, хотите ли вы, чтобы сборка DLL была по умолчанию.

3,4.

if(AGUI_BUILD_DLL)
  add_library(agui SHARED ${AGUI_SOURCES})
  set_target_properties(agui PROPERTIES DEFINE_SYMBOL "AGUI_BUILD_DLL")
else()
  add_library(agui STATIC ${AGUI_SOURCES})
endif()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...