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

如何配置CMake使pybind11模块无需make install输出到指定目录

解决方法
  • 之前配置不生效的核心原因是RUNTIME_OUTPUT_DIRECTORY仅适用于可执行文件,pybind11生成的Python扩展属于MODULE类型动态库:
    • Linux/macOS下后缀为.so/.dylib的扩展,对应CMake的LIBRARY输出目录属性
    • Windows下后缀为.pyd的扩展,对应CMake的RUNTIME输出目录属性
  • install配置仅在执行安装步骤时生效,编译阶段不会触发,因此无法实现编译后直接输出到目标目录的需求

通用跨平台配置方案

直接替换你原有的代码即可:

pybind11_add_module(MyModule MyFile.cpp)
# 同时配置两类输出目录,适配全平台
set_target_properties(MyModule PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY "${BUILD_DIR}"
    RUNTIME_OUTPUT_DIRECTORY "${BUILD_DIR}"
)

多配置生成器适配(Visual Studio、Xcode等)

这类生成器默认会在输出路径下自动追加Debug/Release子目录,要彻底屏蔽这个行为,使用以下配置:

pybind11_add_module(MyModule MyFile.cpp)
set_target_properties(MyModule PROPERTIES
    # 适配所有构建类型,直接输出到BUILD_DIR根目录
    LIBRARY_OUTPUT_DIRECTORY_DEBUG "${BUILD_DIR}"
    LIBRARY_OUTPUT_DIRECTORY_RELEASE "${BUILD_DIR}"
    LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO "${BUILD_DIR}"
    LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL "${BUILD_DIR}"
    RUNTIME_OUTPUT_DIRECTORY_DEBUG "${BUILD_DIR}"
    RUNTIME_OUTPUT_DIRECTORY_RELEASE "${BUILD_DIR}"
    RUNTIME_OUTPUT_DIRECTORY_RELWITHDEBINFO "${BUILD_DIR}"
    RUNTIME_OUTPUT_DIRECTORY_MINSIZEREL "${BUILD_DIR}"
)

修改后重新生成构建目录再编译,生成的扩展文件就会直接输出到你指定的BUILD_DIR路径下,不需要额外执行安装步骤,也不会在当前目录残留文件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 02:57:01