代码拉取完成,页面将自动刷新
# 开源库sdk根目录
# 获取当前文件的的绝对路径
set(relative_path "${CMAKE_CURRENT_LIST_DIR}/../../third")
# 转换为绝对路径
get_filename_component(third ${relative_path} ABSOLUTE)
# message(STATUS "third:${third}")
# 开源库头文件目录
set(third-include "${third}/include")
# message(STATUS "third-include:${third-include}")
# vs编译器特化设置
if(MSVC)
# 获取编译器信息
# Win32-vc90|Win32-vc140|x64-vc90|...
set(third-bin "${third}/${CMAKE_VS_PLATFORM_NAME}-vc${MSVC_TOOLSET_VERSION}/bin")
set(third-lib "${third}/${CMAKE_VS_PLATFORM_NAME}-vc${MSVC_TOOLSET_VERSION}/lib")
# debug工程生成的二进制文件名后增加“d”字符
set(CMAKE_DEBUG_POSTFIX "d")
# message(STATUS "vs version=${CMAKE_VS_PLATFORM_NAME}-vc${MSVC_TOOLSET_VERSION}")
endif()
# 查找头文件宏
macro(find_include_dir target filename filepath)
message(STATUS "Search ${filename} include path: ${filepath}")
# 将传入的参数转换为大写
string(TOUPPER ${target} TARGET)
find_path(${TARGET}_INCLUDE_DIR
NAMES "${filename}"
PATHS "${filepath}")
mark_as_advanced(${TARGET}_INCLUDE_DIR)
endmacro(find_include_dir)
# 查找默认库文件宏
macro(find_default_libraries target libname libpath)
# 将传入的参数转换为大写
string(TOUPPER ${target} TARGET)
message(STATUS "Search ${libname} in path: ${libpath}")
# 检查路径是否存在
if(NOT EXISTS ${libpath})
message(STATUS "The specified search path does not exist: ${libpath}")
return()
endif()
# 查找库文件,不搜索默认路径,仅搜索指定路径
find_library("${TARGET}_LIBRARY_RELEASE"
NAMES "${libname}"
PATHS "${libpath}"
NO_DEFAULT_PATH)
find_library("${TARGET}_LIBRARY_DEBUG"
NAMES "${libname}d"
PATHS "${libpath}"
NO_DEFAULT_PATH)
set(${target}_FOUND "NO")
# # 手动设置XXX_LIBARIES和XXXXX_LIBRARIES标准变量,并为debug和release设置不同的库
# if(${TARGET}_INCLUDE_DIR AND ${TARGET}_LIBRARY_RELEASE)
# set(${TARGET}_FOUND "YES")
# if(NOT ${TARGET}_LIBRARY_DEBUG)
# message("-- Warning Debug ${TARGET}_LIBRARY_DEBUG not found, using: ${${TARGET}_LIBRARY_RELEASE}")
# set(${TARGET}_LIBRARY_DEBUG "${${TARGET}_LIBRARY_RELEASE}")
# endif()
# set(${TARGET}_LIBRARIES debug ${${TARGET}_LIBRARY_DEBUG} optimized ${${TARGET}_LIBRARY_RELEASE})
# set(${TARGET}_LIBRARY ${${TARGET}_LIBRARIES})
# endif()
# 这一步会自动生成XXX_LIBARIES和XXXXX_LIBRARIES标准变量,并为debug和release设置不同的库
include(SelectLibraryConfigurations)
select_library_configurations(${TARGET})
# 设置是否找到包的标志
# 这一步会自动生成XXXXX_FOUND变量
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(${target}
REQUIRED_VARS
${TARGET}_INCLUDE_DIR ${TARGET}_LIBRARIES ${TARGET}_LIBRARY ${TARGET}_LIBRARY_RELEASE ${TARGET}_LIBRARY_DEBUG)
if(${TARGET}_FOUND)
set(${TARGET}_INCLUDE_DIRS ${${TARGET}_INCLUDE_DIR})
endif(${TARGET}_FOUND)
mark_as_advanced(${TARGET}_INCLUDE_DIR ${TARGET}_LIBRARIES ${TARGET}_LIBRARY ${TARGET}_LIBRARY_RELEASE ${TARGET}_LIBRARY_DEBUG)
endmacro(find_default_libraries)
# 查找扩展库文件宏
macro(find_ext_libraries target libname libpath)
message(STATUS "Search ${libname} in path: ${libpath}")
# 将传入的参数转换为大写
string(TOUPPER ${target} TARGET)
# 检查路径是否存在
if(NOT EXISTS ${libpath})
message(STATUS "The specified search path does not exist: ${libpath}")
return()
endif()
# 查找库文件,不搜索默认路径,仅搜索指定路径
find_library("${TARGET}_LIBRARY_RELEASE"
NAMES "${libname}"
PATHS "${libpath}"
NO_DEFAULT_PATH)
find_library("${TARGET}_LIBRARY_DEBUG"
NAMES "${libname}d"
PATHS "${libpath}"
NO_DEFAULT_PATH)
set(${TARGET}_FOUND "NO")
# # 手动设置XXX_LIBARIES和XXXXX_LIBRARIES标准变量,并为debug和release设置不同的库
# if(${TARGET}_INCLUDE_DIR AND ${TARGET}_LIBRARY_RELEASE)
# set(${TARGET}_FOUND "YES")
# message(${TARGET}_INCLUDE_DIR)
# message(${TARGET}_LIBRARY_RELEASE)
# if(NOT ${TARGET}_LIBRARY_DEBUG)
# message("-- Warning Debug ${TARGET}_LIBRARY_DEBUG not found, using: ${${TARGET}_LIBRARY_RELEASE}")
# set(${TARGET}_LIBRARY_DEBUG "${${TARGET}_LIBRARY_RELEASE}")
# endif()
# set(${TARGET}_LIBRARIES debug ${${TARGET}_LIBRARY_DEBUG} optimized ${${TARGET}_LIBRARY_RELEASE})
# set(${TARGET}_LIBRARY ${${TARGET}_LIBRARIES})
# endif()
# 这一步会自动生成XXX_LIBARIES和XXXXX_LIBRARIES标准变量,并为debug和release设置不同的库
include(SelectLibraryConfigurations)
select_library_configurations(${TARGET})
# 设置是否找到包的标志
# 这一步会自动生成XXXXX_FOUND变量
# include(FindPackageHandleStandardArgs)
# FIND_PACKAGE_HANDLE_STANDARD_ARGS(${target}
# REQUIRED_VARS
# ${NAME}_INCLUDE_DIR ${TARGET}_LIBRARIES ${TARGET}_LIBRARY ${TARGET}_LIBRARY_RELEASE ${TARGET}_LIBRARY_DEBUG)
mark_as_advanced(${TARGET}_LIBRARIES ${TARGET}_LIBRARY ${TARGET}_LIBRARY_RELEASE ${TARGET}_LIBRARY_DEBUG)
endmacro(find_ext_libraries)
# 设置 库 默认工程宏
macro(set_default_lib_project target)
# 将传入的参数转换为大写
string(TOUPPER ${target} TARGET)
if(${TARGET}_FOUND)
set(${TARGET}_INCLUDE_DIRS ${${TARGET}_INCLUDE_DIR})
if(NOT ${TARGET}_LIBRARIES)
set(${TARGET}_LIBRARIES ${${TARGET}_LIBRARY})
endif()
if(NOT TARGET ${TARGET}::${TARGET})
add_library(${TARGET}::${TARGET} UNKNOWN IMPORTED)
set_target_properties(${TARGET}::${TARGET} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${${TARGET}_INCLUDE_DIRS}")
if(${TARGET}_LIBRARY_RELEASE)
set_property(TARGET ${TARGET}::${TARGET} APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(${TARGET}::${TARGET} PROPERTIES
IMPORTED_LOCATION_RELEASE "${${TARGET}_LIBRARY_RELEASE}")
endif()
if(${TARGET}_LIBRARY_DEBUG)
set_property(TARGET ${TARGET}::${TARGET} APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(${TARGET}::${TARGET} PROPERTIES
IMPORTED_LOCATION_DEBUG "${${TARGET}_LIBRARY_DEBUG}")
endif()
if(NOT ${TARGET}_LIBRARY_RELEASE AND NOT ${TARGET}_LIBRARY_DEBUG)
set_property(TARGET ${TARGET}::${TARGET} APPEND PROPERTY
IMPORTED_LOCATION "${${TARGET}_LIBRARY}")
endif()
endif()
endif()
endmacro(set_default_lib_project)
# 设置 扩展库 默认工程宏
macro(set_ext_lib_project name type)
# message(${name} ${type})
# 将传入的参数转换为大写
string(TOUPPER ${name} NAME)
string(TOUPPER ${type} TYPE)
# message(${NAME}_${TYPE}_FOUND)
if(${NAME}_${TYPE}_FOUND)
set(${NAME}_${TYPE}_INCLUDE_DIRS ${${NAME}_INCLUDE_DIR})
if(NOT ${NAME}_${TYPE}_LIBRARIES)
set(${NAME}_${TYPE}_LIBRARIES ${${NAME}_${TYPE}_LIBRARY})
endif()
if(NOT TARGET ${NAME}_${TYPE}::${NAME}_${TYPE})
add_library(${NAME}_${TYPE}::${NAME}_${TYPE} UNKNOWN IMPORTED)
set_target_properties(${NAME}_${TYPE}::${NAME}_${TYPE} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${${NAME}_${TYPE}_INCLUDE_DIRS}")
if(${NAME}_${TYPE}_LIBRARY_RELEASE)
set_property(TARGET ${NAME}_${TYPE}::${NAME}_${TYPE} APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(${NAME}_${TYPE}::${NAME}_${TYPE} PROPERTIES
IMPORTED_LOCATION_RELEASE "${${NAME}_${TYPE}_LIBRARY_RELEASE}")
endif()
if(${NAME}_${TYPE}_LIBRARY_DEBUG)
set_property(TARGET ${NAME}_${TYPE}::${NAME}_${TYPE} APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(${NAME}_${TYPE}::${NAME}_${TYPE} PROPERTIES
IMPORTED_LOCATION_DEBUG "${${NAME}_${TYPE}_LIBRARY_DEBUG}")
endif()
if(NOT ${NAME}_LIBRARY_RELEASE AND NOT ${NAME}_${TYPE}_LIBRARY_DEBUG)
set_property(TARGET ${NAME}_${TYPE}::${NAME}_${TYPE} APPEND PROPERTY
IMPORTED_LOCATION "${${NAME}_${TYPE}_LIBRARY}")
endif()
endif()
endif()
endmacro(set_ext_lib_project)
function(set_lib_pdb_file name type)
# 设置 PDB 文件名
set_target_properties(${name}${type} PROPERTIES COMPILE_PDB_NAME_DEBUG "${name}${type}d")
set_target_properties(${name}${type} PROPERTIES COMPILE_PDB_NAME_RELEASE "${name}${type}_rel")
set_target_properties(${name}${type} PROPERTIES COMPILE_PDB_NAME_RELWITHDEBINFO "${name}${type}")
set_target_properties(${name}${type} PROPERTIES COMPILE_PDB_NAME_MINSIZEREL "${name}${type}_min_rel")
endfunction(set_lib_pdb_file)
function(install_lib_pdb_file name type)
# 获取 PDB 文件名
get_target_property(LIB_PDB_DEBUG ${name}${type} COMPILE_PDB_NAME_DEBUG)
# get_target_property(LIB_PDB_RELEASE ${name}${type} COMPILE_PDB_NAME_RELEASE)
get_target_property(LIB_RELWITHDEBINFO ${name}${type} COMPILE_PDB_NAME_RELWITHDEBINFO)
# get_target_property(LIB_PDB_MINSIZEREL ${name}${type} COMPILE_PDB_NAME_MINSIZEREL)
install(FILES
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Debug/${LIB_PDB_DEBUG}.pdb"
# "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/Release/${LIB_PDB_RELEASE}.pdb"
"${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/RelWithDebInfo/${LIB_RELWITHDEBINFO}.pdb"
# "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/MinSizeRel/${LIB_PDB_MINSIZEREL}.pdb"
DESTINATION "${INSTALL_LIB_DIR}"
OPTIONAL)
endfunction(install_lib_pdb_file)
# 定义通用的分组函数
function(group_projects_by_directory PROJECT_DIRS GROUP_NAME)
foreach(PROJECT_DIR ${PROJECT_DIRS})
# 获取该子目录下的所有构建目标
get_directory_property(TARGETS_IN_DIR DIRECTORY ${PROJECT_DIR} BUILDSYSTEM_TARGETS)
# 为每个目标设置分组属性
foreach(TARGET ${TARGETS_IN_DIR})
set_target_properties(${TARGET} PROPERTIES FOLDER ${GROUP_NAME})
endforeach()
endforeach()
endfunction()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。