njeen, Манглинг ничего не значит. Можешь делать stdcall-функции без манглинга или cdecl с proc@4. Соглашение о вызове будет определяться хидером, который будет использовать клиент, а имя импортируемого символа будет в lib-файле (такое же, которое ты создашь для экспорта). M0rg0t, Просто добавляй def к списку входных файлов в add_library().
rmn> Да конечно можно так сделать. Но в норме по-разному декорированные имена означают разные соглашения вызова.
njeen, Основное назначение манглинга - обеспечить возможность полиморфизма и пространств имен на хайлевелах. Соглашение о вызовах по имени не определяется нигде и никогда, это просто сайдэффект, которым пользоваться не нужно (и полагаться на него тоже).
Не получается, пишу add_library(exports.def) пишет ошибку. njeen, через флаги линкера вышло, хз правильно это или нет (там выше задаются другие флаги), сделал примерно так Код (Text): foreach(FILE ${EXE};${DLL}) set(NEW_PRJ_NAME ${PROJECT_NAME}_${FILE}) if(${FILE} STREQUAL ${DLL}) #set_source_files_properties(exports.def PROPERTIES HEADER_FILE_ONLY TRUE) add_library(${NEW_PRJ_NAME} SHARED ${ALL_FILES} ${CFG_FILES}) set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /def:${CMAKE_CURRENT_SOURCE_DIR}/exports.def") ...
Так это Код (Text): set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /def:${CMAKE_CURRENT_SOURCE_DIR}/exports.def" Не заменяет ранее установленные флаги, а добавляет к имеющимся. Правда, не понимаю, зачем вообще тут цикл - разве что один cmake файл собирает несколько target'ов.