[✔️]CMake 在Windows上copy dll

简介: [✔️]CMake 在Windows上copy dll

file命令在Windows上的目录问题


file(GLOB ffmpeg_shared_libries ${FFMPEG_DEV_ROOT}/bin/*dll)
file(COPY ${ffmpeg_shared_libries} DESTINATION ${EXECUTABLE_OUTPUT_PATH})

以上的逻辑,在mac上,的确会将dll复制到对应的目录,但是在Windows上目录结构会变成这样:


  • EXECUTABLE_OUTPUT_PATH


  • Debug


  • Release


  • *.dll


在Windows上编译工程时,EXECUTABLE_OUTPUT_PATH等目录会自动在后边追加Debug/Release,当我们要copy文件时,因为这一层目录的原因,就会非常麻烦,因为cmake中是无法感知到这个目录的。


解决办法


在Windows上,通过add_custom_commandvs的宏变量巧妙解决,算是取巧:


add_custom_command(TARGET ${APP_NAME} PRE_BUILD
  COMMAND ${CMAKE_COMMAND} -E copy_directory ${COCOS2DX_ROOT_PATH}/xxx $(outdir)


就是这个$(out),注意是(),这个目录在vs中是一个宏变量,是指向exe的生成目录的。


再通过COMMADN copyCOMMAND copy-directory,就解决文件copy的问题。


区分debug、release


有时候我们还希望针对不同的编译模式,COMMAND也不同,最常见的场景就是debug、release。


之前我尝试在CMAKE中使用CMAKE_BUILD_TYPE,其实是没有任何效果的,因为这个cmake生成的vs工程中其实已经自带了debug、release模式,至于CMAKE_BUILD_TYPE和vs编译模式之间的关系,具体我也没搞明白。


这里就要借助CMAKE的生成器表达式,直接看CMAKE代码:


COMMAND "$<$<CONFIG:Release>:${CMAKE_COMMAND}>" "$<$<CONFIG:Release>:-E>" "$<$<CONFIG:Release>:copy_directory>"
"$<$<CONFIG:Release>:${CMAKE_CURRENT_LIST_DIR}/static/dll>" $(outdir)


大概的用法就是$<条件:值>,如果条件成立,那么就采用这个值,如果条件不成立,那么值就会被忽略,会被空字符串代替。生成器表达式也支持嵌套。


举例:


生成器表达式
$<1:foo> foo
$<0:foo>


而上边的CMAKE代码中,$<CONFIG:arg>是用来测试构建类型,如果arg对应的构建类型正在构建,那么它的的值就为TRUE



目录
相关文章
|
2月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
288 4
|
7月前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
|
7月前
|
存储 Java C语言
Windows 下 JNI 调用动态链接库 dll
Windows 下 JNI 调用动态链接库 dll
176 0
|
JSON 开发工具 C++
Windows下用CMake编译JsonCpp及配置(适合新手)
Windows下用CMake编译JsonCpp及配置(适合新手)
660 0
|
7月前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
426 0
|
2月前
|
存储 Linux 编译器
cmake的单目录和多目录的使用(Linux和Windows)
本文介绍了在Windows和Linux平台上使用CMake构建单目录和多目录项目的步骤,包括如何配置CMakeLists.txt文件以及如何生成和使用可执行文件、库文件。
52 2
|
4月前
|
XML C# 数据格式
绝密档案曝光!Windows平台如何深挖一个dll背后的神秘依赖,揭露隐藏的秘密!
【8月更文挑战第14天】在Windows系统中,动态链接库(DLL)对程序运行至关重要。了解DLL的依赖关系有助于软件的调试与优化。本文以具体案例演示如何查看DLL依赖。首先确保环境已安装Windows及具备基本开发知识。
82 0
|
7月前
|
存储 Java C++
Windows 下 JNA 调用动态链接库 dll
Windows 下 JNA 调用动态链接库 dll
125 0
|
7月前
|
SQL 关系型数据库 MySQL
Trinitycore学习之windows上用cmake生成vs项目并尝试在windows上启动服务
Trinitycore学习之windows上用cmake生成vs项目并尝试在windows上启动服务
132 0
|
7月前
|
计算机视觉 Windows
OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法
OpenCV + CLion在windows环境下使用CMake编译, 出现Mutex相关的错误的解决办法
310 0