cmake常用配置,设置输出文件夹,创建、拷贝

用法#

  • cmakelists.txt中使用include包含下面的cmake文件即可

核心cmake脚本代码如下#

Copy Highlighter-hljs
# ------------------------------------------------------------ # 拷贝文件 macro(CP_FILES ) set(options) set(oneValueArgs ) # SRC_FILES - 要拷贝哪些文件 # TARGET_ROOT - 拷贝到哪里 set(multiValueArgs SRC_FILES TARGET_ROOT ) # 解析参数 cmake_parse_arguments(CF "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # 有这么多文件需要拷贝 foreach(WHICH_FILE ${CF_SRC_FILES}) # 将文件拷贝到这么多的文件夹 foreach(WHICH_ROOT ${CF_TARGET_ROOT}) # 将文件WHICH_FILE拷贝到WHICH_ROOT目录 execute_process( COMMAND ${CMAKE_COMMAND} -E copy ${WHICH_FILE} ${WHICH_ROOT}) endforeach() endforeach() endmacro() # ------------------------------------------------------------ # 创建文件夹 macro(MKDIR) set(options) set(oneValueArgs ) # TARGET_ROOT - 有哪些路径需要创建 set(multiValueArgs TARGET_ROOT ) # 解析参数 cmake_parse_arguments(MK "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # 需要创建这么多的的文件夹 foreach(WHICH_ROOT ${MK_TARGET_ROOT}) # 创建文件夹落地 execute_process( COMMAND ${CMAKE_COMMAND} -E make_directory ${WHICH_ROOT}) endforeach() endmacro() # ------------------------------------------------------------ # 拷贝文件夹 macro(CP_ROOT) set(options) set(oneValueArgs ) # SRC_ROOT - 要拷贝哪些文件夹 # TARGET_ROOT - 拷贝到哪里 set(multiValueArgs SRC_ROOT TARGET_ROOT ) # 解析参数 cmake_parse_arguments(CR "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) # 有这么多需要拷贝 foreach(WHICH_SRC_ROOT ${CR_SRC_ROOT}) # 将文件拷贝到这么多的文件夹 foreach(WHICH_TARGET_ROOT ${CR_TARGET_ROOT}) # 将文件 WHICH_SRC_ROOT 拷贝到 WHICH_TARGET_ROOT 目录 execute_process( COMMAND ${CMAKE_COMMAND} -E copy_directory ${WHICH_SRC_ROOT} ${WHICH_TARGET_ROOT}) endforeach() endforeach() endmacro() # ---------------------------------------------------------------- # 设置输出使用 set(output_prefix ${CMAKE_CURRENT_LIST_DIR}/../publish) if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") # using Clang set(compiler_name clang) elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # using GCC set(compiler_name gcc) elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel") set(compiler_name intel) elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") if(MSVC_VERSION EQUAL 1400) set(compiler_name vc80) elseif(MSVC_VERSION EQUAL 1500) set(compiler_name vc90) elseif(MSVC_VERSION EQUAL 1600) set(compiler_name vc100) elseif(MSVC_VERSION EQUAL 1700) set(compiler_name vc110) elseif(MSVC_VERSION EQUAL 1800) set(compiler_name vc120) elseif(MSVC_VERSION EQUAL 1900) set(compiler_name vc140) elseif(MSVC_VERSION EQUAL 1910) set(compiler_name vc141) elseif(MSVC_VERSION EQUAL 1920) set(compiler_name vc142) elseif(MSVC_VERSION EQUAL 1930) set(compiler_name vc143) else() set(compiler_name vcXX) endif() endif() # 64位 if (CMAKE_CL_64) set (platform "x64") # 32 else() set (platform "x86") endif() # publish/vc100/x64 set(publish_prefix ${output_prefix}/${compiler_name}/${platform}) # 指定include目录 set(pir ${publish_prefix}/include) # 指定可执行程序输出目录 set(pbd ${publish_prefix}/bin/Debug) set(pbr ${publish_prefix}/bin/Release) # 指定 库文件输出目录 set(pld ${publish_prefix}/lib/Debug) set(plr ${publish_prefix}/lib/Release) # 设置 可执行程序输出目录 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${pbd}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${pbr}) # 设置库文件输出目录 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${pld}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${plr}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${pld}) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${plr}) # 输出cmake文件夹 set(pc ${publish_prefix}/cmake) # ---------------------------------------------------------------- # 有这么多文件夹需要创建 set(TO_MK_ROOT ${pir} ${pld} ${plr} ${pbd} ${pbr} ${pc} ) # message(${TO_MK_ROOT}) MKDIR(TARGET_ROOT ${TO_MK_ROOT})
posted @   mohist  阅读(779)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2020-09-23 libevent之学习文档
2020-09-23 博客园美化去除默认左侧的通知栏、正文全屏、隐藏底部第三方、添加回到顶部按钮
2020-09-23 c++之sigslot库
2020-09-23 c++代码编译错误查找方法之宏
点击右上角即可分享
微信分享提示
CONTENTS