c++ - 如何使cmake输出到 "build"目录?

标签 c++ cmake

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

代码结构

➜  cmake-test tree .
.
├── CMakeLists.txt
└── hello.cpp

0 directories, 2 files

CMakeLists.txt

# 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)

构建命令和输出

➜  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 版本

➜  cmake-test cmake --version

cmake version 3.11.4

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

操作系统

Linux

最佳答案

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

我理解最初说“但我希望我的构建系统在其他地方写入输出”的冲动。但是 CMake 通常不会以您最初期望的方式使用,并且运行您的 CMake 构建的其他人不会期望您期望什么,所以最好只使用内置的默认行为,即cmake 运行时的输出。

换句话说:您正在与工具作斗争。不要那样做。

关于c++ - 如何使cmake输出到 "build"目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52022717/

相关文章:

c++ - 通过 "pointers to class members"访问作为数组的类成员

c++ - 如何在 DirectX 9 中将 XMMATRIX 转换为 D3DMATRIX?

c++ - c++类与OpenCV矩阵运算之间的转换

c++ - 如何创建和分发 SteamVR 仪表板覆盖

c++ - 找不到自定义编译 'CMake'

c++ - Xcode 找不到目标文件

cmake - 如何在 CMake 中跨多行拆分字符串?

c++ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINES) 不工作

CMake:将相对路径转换为绝对路径,构建目录为当前目录

c++ - 设置子模块目标的输出目录时 CMAKE_BINARY_DIR 和 PROJECT_BINARY_DIR 之间的权衡