Commit e2908e97 by 夏楚 Committed by GitHub

cmake构建时自动生成mk_export头文件,解决msvc链接设备问题 (#1660)

* 解决msvc下链接问题
* CMAKE添加自动生成mk api export头文件
* 兼容非cmake构建时情况

Co-authored-by: baiyfcu <baiyfcu@gmail.com>
parent 989e7b2e
......@@ -178,7 +178,7 @@ endif ()
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/version.h.ini
${CMAKE_BINARY_DIR}/Version.h
${CMAKE_BINARY_DIR}/version.h
@ONLY
)
......
include_directories(include source)
include(GenerateExportHeader)
file(GLOB api_src_list include/*.h source/*.cpp source/*.h source/*.c)
if (IOS)
add_library(mk_api STATIC ${api_src_list})
target_link_libraries(mk_api ${LINK_LIB_LIST} jsoncpp)
else ()
if(ENABLE_API_STATIC_LIB)
if (ENABLE_API_STATIC_LIB)
add_library(mk_api STATIC ${api_src_list})
if (WIN32)
add_definitions(-DMediaKitApi_STATIC)
endif ()
else ()
add_library(mk_api SHARED ${api_src_list})
if (WIN32)
add_definitions(-DMediaKitApi_EXPORTS)
endif ()
endif()
endif ()
if (CMAKE_SYSTEM_NAME MATCHES "Linux")
target_link_libraries(mk_api -Wl,--start-group jsoncpp ${LINK_LIB_LIST} -Wl,--end-group)
else ()
target_link_libraries(mk_api jsoncpp ${LINK_LIB_LIST})
endif ()
add_subdirectory(tests)
endif ()
add_definitions(-DGENERATE_EXPORT)
include_directories(${CMAKE_BINARY_DIR})
generate_export_header(mk_api
EXPORT_MACRO_NAME API_EXPORT
BASE_NAME MK_API
STATIC_DEFINE MediaKitApi_STATIC
EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/mk_export.h"
)
file(GLOB api_header_list include/*.h)
if (NOT IOS)
file(GLOB api_header_list include/*.h ${CMAKE_BINARY_DIR}/*.h)
install(FILES ${api_header_list} DESTINATION ${INSTALL_PATH_INCLUDE})
install(TARGETS mk_api ARCHIVE DESTINATION ${INSTALL_PATH_LIB} LIBRARY DESTINATION ${INSTALL_PATH_LIB})
endif ()
endif ()
\ No newline at end of file
......@@ -14,21 +14,26 @@
#include <stdint.h>
#include <stddef.h>
#if defined(GENERATE_EXPORT)
#include "mk_export.h"
#endif
#if defined(_WIN32) && defined(_MSC_VER)
# ifndef MediaKitApi_STATIC
# if defined(MediaKitApi_EXPORTS)
# define API_EXPORT __declspec(dllexport)
# else
# define API_EXPORT __declspec(dllimport)
# endif
# define API_CALL __cdecl
# else
# define API_EXPORT
# define API_CALL
# endif
# define API_CALL __cdecl
#else
# define API_CALL
#endif
#if defined(_WIN32) && defined(_MSC_VER)
# if !defined(GENERATE_EXPORT)
# if defined(MediaKitApi_EXPORTS)
# define API_EXPORT __declspec(dllexport)
# else
# define API_EXPORT __declspec(dllimport)
# endif
# endif
#elif !defined(GENERATE_EXPORT)
# define API_EXPORT
# define API_CALL
#endif
#ifdef __cplusplus
......
......@@ -17,7 +17,7 @@
using namespace mediakit;
extern "C" {
#define XX(name, type, value, str, mpeg_id) const int MK##name = value;
#define XX(name, type, value, str, mpeg_id) API_EXPORT const int MK##name = value;
CODEC_MAP(XX)
#undef XX
}
......
aux_source_directory(. TEST_SRC_LIST)
include_directories(${PROJECT_BINARY_DIR}/api)
foreach(TEST_SRC ${TEST_SRC_LIST})
STRING(REGEX REPLACE "^\\./|\\.c[a-zA-Z0-9_]*$" "" TEST_EXE_NAME ${TEST_SRC})
......
......@@ -33,7 +33,7 @@
#endif
#if defined(ENABLE_VERSION)
#include "Version.h"
#include "version.h"
#endif
#if !defined(_WIN32)
......
......@@ -14,7 +14,7 @@
using namespace toolkit;
#if defined(ENABLE_VERSION)
#include "Version.h"
#include "version.h"
#endif
extern "C" {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论