75 lines
2.2 KiB
CMake
75 lines
2.2 KiB
CMake
project(${JUDGE_TARGET_NAME})
|
||
|
||
set(MSG_NOTE "${MSG_NOTE} [${PROJECT_NAME}]")
|
||
message("${MSG_NOTE} this project name ${PROJECT_NAME}")
|
||
|
||
add_compile_definitions(JUDGE_COMPILE_TARGET_SDK) #编译目标工程定义
|
||
#add_compile_definitions(JUDGE_SHARED_EXPORT)
|
||
#add_compile_definitions(JUDGE_SHARED_IMPORT)
|
||
|
||
set(JUDGE_INCLUDE_CURRENT
|
||
${PROJECT_SOURCE_DIR}
|
||
)
|
||
|
||
file(GLOB_RECURSE JUDGE_SOURCE_CURRENT
|
||
${PROJECT_SOURCE_DIR}/*.h*
|
||
${PROJECT_SOURCE_DIR}/*.c*
|
||
)
|
||
|
||
set(JUDGE_LIB_DIR_CURRENT
|
||
|
||
)
|
||
|
||
set(JUDGE_LIB_FILE_CURRENT
|
||
|
||
)
|
||
|
||
source_group(\\ FILES ${JUDGE_SOURCE_CURRENT})
|
||
|
||
include_directories(
|
||
${JUDGE_INCLUDE}
|
||
${JUDGE_INCLUDE_PLATFORM}
|
||
${JUDGE_INCLUDE_CURRENT}
|
||
)
|
||
|
||
link_directories(
|
||
${JUDGE_LIB_DIR}
|
||
${JUDGE_LIB_DIR_PLATFORM}
|
||
${JUDGE_LIB_DIR_CURRENT}
|
||
)
|
||
|
||
if(BUILD_SHARED_LIBS)
|
||
message("${MSG_NOTE} BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} build shared dll")
|
||
add_compile_definitions(JUDGE_SHARED_EXPORT) #cmake version must be greater than 3.12.0
|
||
else()
|
||
message("${MSG_NOTE} BUILD_SHARED_LIBS=${BUILD_SHARED_LIBS} build static lib")
|
||
endif()
|
||
|
||
# BUILD_SHARED_LIBS ON的时候生成的是隐式调用的动态库 如果生成显示调用动态库 加上SHARED参数
|
||
add_library(${JUDGE_TARGET_NAME}
|
||
${JUDGE_SOURCE}
|
||
${JUDGE_SOURCE_PLATFORM}
|
||
${JUDGE_SOURCE_CURRENT}
|
||
)
|
||
|
||
# PUBLIC 在public后面的库会被Link到你的target中,并且里面的符号也会被导出,提供给第三方使用。
|
||
# PRIVATE 在private后面的库仅被link到你的target中,并且终结掉,第三方不能感知你调了啥库
|
||
# INTERFACE 在interface后面引入的库不会被链接到你的target中,只会导出符号
|
||
# 本质上可以使用public 来解决,可以减少坑。
|
||
target_link_libraries(${JUDGE_TARGET_NAME} PUBLIC
|
||
${JUDGE_LIB_FILE}
|
||
${JUDGE_LIB_FILE_PLATFORM}
|
||
${JUDGE_LIB_FILE_CURRENT}
|
||
)
|
||
|
||
# 设置动态库的版本号
|
||
#set(CMAKE_SHARED_LIBRARY_SONAME_VERSION 1)
|
||
|
||
#CMAKE_STATIC_LIBRARY_SUFFIX STREQUAL "lib" OR
|
||
if(CMAKE_SHARED_LIBRARY_PREFIX STREQUAL lib)
|
||
set_target_properties(${JUDGE_TARGET_NAME} PROPERTIES OUTPUT_NAME ${JUDGE_TARGET_NAME}) #VERSION 1.0.0 SOVERSION 1.0
|
||
else()
|
||
set_target_properties(${JUDGE_TARGET_NAME} PROPERTIES OUTPUT_NAME lib${JUDGE_TARGET_NAME}) #VERSION 1.0.0 SOVERSION 1.0
|
||
endif()
|
||
|