1 Star 1 Fork 1

橙里路人/depends

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
find-common.cmake 10.62 KB
一键复制 编辑 原始数据 按行查看 历史
# 开源库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()
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/binary0010/depends.git
git@gitee.com:binary0010/depends.git
binary0010
depends
depends
master

搜索帮助