讲师中心 微信公众号
AI工具推荐 视频效率加速

CMakeLists怎么指定输出目录?

夏浩酱_4042

夏浩酱_4042

发布时间:2026-08-08 17:55:02

|

923人浏览过

|

来源于php中文网

原创

CMake 中 build 目录和 install 目录必须分开指定:build 目录由 cmake 命令执行路径决定(如 -B build),存放编译中间产物;install 目录由 CMAKE_INSTALL_PREFIX 控制,install() 的 DESTINATION 为其子路径,两者不可混用。

cmakelists怎么指定输出目录?

build 目录和 install 目录必须分开指定

CMake 默认把编译产物(如 .o、.a、.so)和最终可执行文件/库都放在 build 目录里,但你不能靠 set(CMAKE_BINARY_DIR ...) 或 set(CMAKE_CURRENT_BINARY_DIR ...) 来“修改输出位置”——这些变量是只读的,手动赋值无效。真正可控的是两个独立路径:build 目录(CMake 运行时所在目录)和 install 目录(安装目标路径)。

  • build 目录由你执行 cmake 命令时的当前工作目录决定,例如 mkdir build && cd build && cmake ..,所有中间文件就落在 build/ 下
  • install 目录由 CMAKE_INSTALL_PREFIX 控制,它影响 make install 或 cmake --install 的目标位置,默认通常是 /usr/local
  • 想让可执行文件统一输出到某个子目录(比如 bin/),要用 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin),而不是改 CMAKE_BINARY_DIR

CMAKE_RUNTIME_OUTPUT_DIRECTORY 等输出变量要提前设置

这些变量必须在 project() 之后、add_executable() 之前设置,否则对已定义的目标不生效。它们不是全局覆盖,而是影响后续新添加的目标。

C++ Code Review Master
C++ Code Review Master

组合式C++代码评审方案,融合静态分析、AI推理、多轮迭代评审和C++专项检查,适用于PR审查、增量代码审查、全项目评审和代码质量评分,触发词包括review cpp、cpp代码评审、C++review、代码审查。

下载
  • CMAKE_RUNTIME_OUTPUT_DIRECTORY:控制 add_executable() 生成的可执行文件路径
  • CMAKE_LIBRARY_OUTPUT_DIRECTORY:控制 add_library(SHARED) 输出的 .so / .dll
  • CMAKE_ARCHIVE_OUTPUT_DIRECTORY:控制 add_library(STATIC) 输出的 .a / .lib
  • 它们的值可以是绝对路径,但更推荐用相对路径(如 ${CMAKE_BINARY_DIR}/bin),避免跨平台问题

install() 指令里的 DESTINATION 是相对于 CMAKE_INSTALL_PREFIX 的

即使你用 CMAKE_RUNTIME_OUTPUT_DIRECTORY 把可执行文件输出到了 build/bin/,install() 仍按自己的规则复制。它的 DESTINATION 参数不是绝对路径,而是拼接到 CMAKE_INSTALL_PREFIX 后面的子路径。

  • install(TARGETS myapp DESTINATION bin) → 最终装到 ${CMAKE_INSTALL_PREFIX}/bin/myapp
  • cmake -DCMAKE_INSTALL_PREFIX=/opt/mypkg .. 后,make install 就会把文件放进 /opt/mypkg/bin/
  • 如果没写 install(),那 CMAKE_INSTALL_PREFIX 完全不起作用;光设变量不调用 install() 是没意义的

Windows 下 DLL 的输出和运行时查找容易出错

在 Windows 上,.exe 运行时需要找到对应的 .dll,但 CMake 默认不会自动把 DLL 复制到 EXE 同目录,也不会改 PATH。这是最常被忽略的环节。

  • 用 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 和 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 把 EXE 和 DLL 都输出到同一目录,是最简单可靠的方案
  • 或者用 install(FILES $<TARGET_FILE:mylib> DESTINATION bin) 显式把 DLL 装进 bin/,再配合 install(TARGETS myapp RUNTIME DESTINATION bin)
  • 不要依赖 add_compile_definitions(_CRT_SECURE_NO_WARNINGS) 之类去绕过 DLL 加载失败——那是掩盖问题,不是解决路径问题
CMake 不像 Makefile 那样有统一的 “output dir” 概念;它把构建中间产物、最终目标、安装目标三者完全解耦。搞混这三层,就会反复遇到文件找不到、install 后路径不对、Windows 下 DLL 加载失败这些问题。

热门AI工具

更多
切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

超级简历WonderCV

一款AI办公效率工具,主要用于免费求职简历模版下载制作,应届生职场人必备简历制作神器,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

讯飞绘文

讯飞绘文是一款由科大讯飞推出的一站式 AIGC 内容运营平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

相关专题

更多
C++ 跨平台开发
C++ 跨平台开发

本专题聚焦 C++ 在跨平台应用与工程构建中的实战应用,系统讲解 CMake 构建系统、跨平台编译配置、第三方库集成、调试技巧、静态与动态链接库管理等核心知识。通过实战案例(如跨平台工具开发、Linux与Windows编译兼容性项目),帮助学习者掌握 从环境配置到完整跨平台构建的开发能力。

5806

2025.10.17

c++  cmake用法
c++ cmake用法

本专题整合了c++ cmake用法相关教程,阅读专题下面的文章了解更多详细内容。

1471

2025.10.23

C++ 编译构建系统与CMake实战
C++ 编译构建系统与CMake实战

本专题聚焦 C++ 项目的编译与构建体系,系统讲解 CMake 的核心语法、项目结构设计、库与依赖管理、跨平台构建、调试与发布配置。通过完整项目示例,帮助开发者掌握 从源码到可执行程序的工程化构建流程,提升 C++ 项目在实际开发中的可维护性与扩展性。

354

2025.12.13

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

40

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

40

2026.09.30

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

20

2026.09.30

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

20

2026.09.30

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

20

2026.09.29

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

240

2026.09.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CMake 与 Conan 集成实践
CMake 与 Conan 集成实践

共0课时 | 0人学习

Conan 2 入门教程
Conan 2 入门教程

共0课时 | 0人学习

CLion CMake 快速入门教程
CLion CMake 快速入门教程

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn