首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何让cmake输出到"build“目录?

如何让cmake输出到"build“目录?
EN

Stack Overflow用户
提问于 2018-08-26 10:25:19
回答 3查看 29.1K关注 0票数 12

我正在使用cmake编译一个C++项目,并希望cmake生成build文件夹中的所有输出文件(如用于创建二进制文件的Makefile等元文件)。我已经检查了How do I make cmake output into a 'bin' dir?中的所有答案,没有一个对我有效(令人惊讶!)。文件是在根文件夹中生成的,而不是在build文件夹中,这里有什么问题吗?我想我一定是漏掉了什么。

代码结构

代码语言:javascript
复制
➜  cmake-test tree .
.
├── CMakeLists.txt
└── hello.cpp

0 directories, 2 files

CMakeLists.txt

代码语言:javascript
复制
# Specify the minimum version for CMake
cmake_minimum_required(VERSION 3.11)

# Project's name
project(hello)

# Set the output folder where your program will be created
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

# The following folder will be included
include_directories("${PROJECT_SOURCE_DIR}")

add_executable(hello ${PROJECT_SOURCE_DIR}/hello.cpp)

构建命令和输出

代码语言:javascript
复制
➜  cmake-test cmake .

-- The C compiler identification is GNU 8.2.0
-- The CXX compiler identification is GNU 8.2.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/searene/CLionProjects/cmake-test

➜  cmake-test ls

bin  CMakeCache.txt  CMakeFiles  cmake_install.cmake  CMakeLists.txt  hello.cpp  Makefile

cmake版本

代码语言:javascript
复制
➜  cmake-test cmake --version

cmake version 3.11.4

CMake suite maintained and supported by Kitware (kitware.com/cmake).

操作系统

Linux

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-26 10:37:05

通常的方法不是更改变量来设置路径,而是简单地创建输出目录,更改到该目录,然后从那里运行cmake。因此,您通常使用cmake ..或类似的代码来代替cmake .

我理解最初的冲动:“但我希望我的构建系统在其他地方写入输出。”但是CMake通常不会以您最初期望的方式使用,而且运行CMake构建的其他人也不会期望您期望的结果,因此最好只使用内置的默认行为,即将输出放在运行cmake的任何位置。

换句话说:你是在与工具抗争。别干那事。

票数 22
EN

Stack Overflow用户

发布于 2018-08-26 16:59:17

免责声明:我推荐使用@john-zwinck的答案。

默认情况下,cmake使用当前工作目录作为构建目录,使用您提供的任何路径作为源目录。因此,实现目标的正常方法是

cmake在那里创建构建目录(mkdir build)

  • go (cd build)

  • call,并将源目录作为参数(cmake path/to/source)

但据我所知,还有另一种方式,据我所知,cmake文档中没有记录,仅出于兼容性原因或内部使用,有些人正在使用。-B-H标志

代码语言:javascript
复制
cmake -Hpath/to/source -Bpath/to/build

或者甚至来自源目录

代码语言:javascript
复制
cmake . -Bbuild

重要提示:-B后没有空格。

票数 14
EN

Stack Overflow用户

发布于 2020-12-09 03:52:39

CMake 3.19.1 (不确定旧版本如何)具有以下选项(来自文档):

cmake -S -B

使用作为构建树和源树。指定的路径可以是绝对路径,也可以是相对于当前工作目录的相对路径。源树必须包含CMakeLists.txt文件。如果构建树尚不存在,则会自动创建构建树。例如:

cmake -S源-B build

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52022717

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档