You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake复制文件至构建目录:VS Code与Visual Studio通用方案

适配多环境的CMake脚本解决方案

核心思路

利用CMake的生成器表达式自动适配不同构建系统的输出目录,避免硬编码路径。关键是使用$<TARGET_FILE_DIR:PyRun>获取可执行文件的实际输出目录,这个表达式会根据生成器(Visual Studio、Ninja、Makefile等)自动解析出正确的路径。

完整CMakeLists.txt示例

cmake_minimum_required(VERSION 3.15)
project(PyRun)

# 定义可执行目标
add_executable(PyRun foo.cpp)

# 复制script.py到可执行文件所在目录
add_custom_command(
    TARGET PyRun POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${CMAKE_CURRENT_SOURCE_DIR}/script.py"
        "$<TARGET_FILE_DIR:PyRun>/script.py"
    COMMENT "Copying script.py to executable directory..."
)

关键部分解释

  • $<TARGET_FILE_DIR:PyRun>:生成器表达式,构建时会动态替换为PyRun可执行文件的实际输出目录。不管是Visual Studio的Debug/Release子目录、VS Code用Ninja时的$<CONFIG>目录,还是Linux下的构建根目录,都能准确匹配。
  • copy_if_different:仅当源文件script.py比目标文件新,或目标文件不存在时才执行复制,避免不必要的重复操作。
  • POST_BUILD:确保复制操作在可执行文件构建完成后执行,保证目标目录已经存在。

验证适配性

  • Visual Studio:生成器自动将可执行文件放在${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>,$<TARGET_FILE_DIR>会正确指向该路径,复制操作正常生效。
  • VS Code(Ninja生成器):多配置模式下输出目录为${CMAKE_CURRENT_BINARY_DIR}/$<CONFIG>,表达式自动适配;单配置模式下直接指向构建根目录,依然有效。
  • Linux(Makefile生成器):可执行文件默认输出在构建目录根(或指定子目录),$<TARGET_FILE_DIR>会准确指向该位置,无需额外调整。

内容的提问来源于stack exchange,提问作者ChrCury78

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 00:42:09