Создание типа конфигурации DLL с помощью CMake - PullRequest
3 голосов
/ 21 июня 2020

Я использую CMake для создания своих решений Visual Studio. Прямо сейчас CMake генерирует две конфигурации Release и Debug в рамках одного проекта. Обе конфигурации создают приложение win32 (.exe).

Это отлично работает, но я также хотел бы создать третью конфигурацию, которая вместо этого создает DLL. Я знаю, что в CMake мы можем использовать add_library(LibraryName SHARED [files]) для создания отдельного проекта , который создает сборку целевой библиотеки DLL, но я не хочу этого. Вместо этого я хотел бы создать конфигурацию DLL в Visual Studio вместе с Debug и Release.

Я могу получить конфигурацию, добавив set(CMAKE_CONFIGURATION_TYPES Release Debug DLL) в CMakeList, но я не уверен, как go о его реальной настройке. Как сделать так, чтобы эта настраиваемая конфигурация действительно создавала DLL? Если возможно, я также хотел бы настроить имя вывода и каталог этой конфигурации, точно так же, как я могу с CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE et c.

Возможно ли это?

1 Ответ

1 голос
/ 29 июня 2020

Вместо add_library(LibraryName SHARED [files]) вы можете оставить add_library(LibraryName [files]) без STATIC или SHARED, а затем вы можете запустить CMake с -DBUILD_SHARED_LIBS:BOOL=OFF или -DBUILD_SHARED_LIBS:BOOL=ON для создания stati c или разделяемых библиотек соответственно.

Но для этого вам потребуется дважды запустить CMake и дважды скомпилировать.

Чтобы собрать как stati c, так и общий доступ, вы можете заменить это на CMakeLists.txt:

add_library(LibraryName [files])

с:

add_library(LibraryName STATIC [files])
add_library(LibraryName_shared SHARED [files])
set_target_properties(LibraryName_shared PROPERTIES OUTPUT_NAME LibraryName)

Возможно, вам также придется продублировать другие строки (например, target_link_libraries и install) с целью _shared.

Я часто использую этот метод для сборки stati c и общие библиотеки в одном go для библиотек, CMakeLists.txt которых не предназначен для этого.

Поскольку вы добавляете отдельную цель таким образом, вы также должны иметь возможность указать отдельное имя вывода и каталог для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...