我正在使用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 filesCMakeLists.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 Makefilecmake版本
➜ cmake-test cmake --version
cmake version 3.11.4
CMake suite maintained and supported by Kitware (kitware.com/cmake).操作系统
Linux
发布于 2018-08-26 10:37:05
通常的方法不是更改变量来设置路径,而是简单地创建输出目录,更改到该目录,然后从那里运行cmake。因此,您通常使用cmake ..或类似的代码来代替cmake .。
我理解最初的冲动:“但我希望我的构建系统在其他地方写入输出。”但是CMake通常不会以您最初期望的方式使用,而且运行CMake构建的其他人也不会期望您期望的结果,因此最好只使用内置的默认行为,即将输出放在运行cmake的任何位置。
换句话说:你是在与工具抗争。别干那事。
发布于 2018-08-26 16:59:17
免责声明:我推荐使用@john-zwinck的答案。
默认情况下,cmake使用当前工作目录作为构建目录,使用您提供的任何路径作为源目录。因此,实现目标的正常方法是
cmake在那里创建构建目录(mkdir build)
cd build)
cmake path/to/source)但据我所知,还有另一种方式,据我所知,cmake文档中没有记录,仅出于兼容性原因或内部使用,有些人正在使用。-B和-H标志
cmake -Hpath/to/source -Bpath/to/build或者甚至来自源目录
cmake . -Bbuild重要提示:-B后没有空格。
发布于 2020-12-09 03:52:39
CMake 3.19.1 (不确定旧版本如何)具有以下选项(来自文档):
cmake -S -B
使用作为构建树和源树。指定的路径可以是绝对路径,也可以是相对于当前工作目录的相对路径。源树必须包含CMakeLists.txt文件。如果构建树尚不存在,则会自动创建构建树。例如:
cmake -S源-B build
https://stackoverflow.com/questions/52022717
复制相似问题