Комментарии 11
Данное свойство автоматически создает module definition (.def) со всеми глобальными символами из .obj файла для динамической библиотеки на ОС Windows.
О!!! Спасибо! А то мне сейчас приходится юзать перловый скрипт который создаёт этот .def. Но увы пока приходится использовать 4.3 т.к. в 4.4 отломали MSVC2015.
+1
а ещё есть generate_export_header
+4
С данным флагом не сталкивался, на досуге почитаю и применю в некоторых проектах
0
Этот макрос из разряда "must use" в связке библиотеки и cmake. Он генерирует в папке билда файл с определением макросов экспорта символов, учитывая сборку в статику (оставляет пустыми) и динамику (__declspec(..)), а также макросы deprecated для маркировки старых функций.
В простейшем случае достаточно написать:
и использовать сгенерированный файл
Более тонкая настройка позволяет указать необходимое имя генерируемого файла, макросов и прочего.
В простейшем случае достаточно написать:
generate_export_header(mylib)
и использовать сгенерированный файл
#include "mylib_export.h"
class MYLIB_EXPORT MyClass
{
};
Более тонкая настройка позволяет указать необходимое имя генерируемого файла, макросов и прочего.
+1
Замечательное свойство, теперь можно удалять этот мусор из заголовков.
Дополню: чтобы экспортировать только символы из определённого target'a, можно написать
Дополню: чтобы экспортировать только символы из определённого target'a, можно написать
set_target_properties(таргет1 таргет2 PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
0
И вероятность появления ошибки во время неправильного написания блока условной компиляции и определения макроса среди разработчиков сведена к нулюПросто надо использовать cmake-функцию generate_export_header, тогда человеческий фактор исключается.
```
include(GenerateExportHeader)
generate_export_header(MyLib
EXPORT_FILE_NAME MyLibExport.h
EXPORT_MACRO_NAME MyLib_EXPORT
NO_EXPORT_MACRO_NAME MyLib_HIDDEN
STATIC_DEFINE MyLib_STATIC
)
```
Не знаю, что такое случилось с тегом source, но код нормально не вставляется
+1
Не знаю, что такое случилось с тегом source, но код нормально не вставляется
Каким бы странным это не казалось, но теги и код должны быть на разных строчках.
+2
Как говорится дело вкуса, но есть одно но:
данный метод требует добавление нескольких строчек кода, но и сам код будет выглядит не естественным образом.
Предложенный метод позволяет разработчику видеть код, что на Windows и Linux одинаковым способом без макроса EXPORT.
и в cmake-листе всего одна строка, а не шесть.
данный метод требует добавление нескольких строчек кода, но и сам код будет выглядит не естественным образом.
Предложенный метод позволяет разработчику видеть код, что на Windows и Linux одинаковым способом без макроса EXPORT.
и в cmake-листе всего одна строка, а не шесть.
0
Со сгенерированным заголовочным файлом экспорта код тоже выглядит одинаково на всех поддерживаемых платформах.
А если не нужно экспортировать все символы? Способ с generate_export_header позволяет это сделать (NO_EXPORT_MACRO_NAME). Код в любом случае будет выглядеть одинаково и, я не вижу, что есть неестественного в подобном коде:
Причем это совершенно не мешает при статической линковке, так как сгенерированный файл экспорта учитывает, что библиотека может быть как SHARED, так и STATIC.
Естественно, что при этом и новая переменная WINDOWS_EXPORT_ALL_SYMBOLS имеет полное право на жизнь. :)
А если не нужно экспортировать все символы? Способ с generate_export_header позволяет это сделать (NO_EXPORT_MACRO_NAME). Код в любом случае будет выглядеть одинаково и, я не вижу, что есть неестественного в подобном коде:
#include "MyLibExport.h"
class MyLib_EXPORT MyClass
{
};
MyLib_HIDDEN void MyHiddenFunction();
Причем это совершенно не мешает при статической линковке, так как сгенерированный файл экспорта учитывает, что библиотека может быть как SHARED, так и STATIC.
Естественно, что при этом и новая переменная WINDOWS_EXPORT_ALL_SYMBOLS имеет полное право на жизнь. :)
0
Во-первых, при чем здесь __linux__?
Во-вторых, экспорт всех символов подряд несет за собой негативные последствия, почему вы о них умолчали?
Во-вторых, экспорт всех символов подряд несет за собой негативные последствия, почему вы о них умолчали?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
CMake — создание динамических библиотек