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()