c++ - 如何使 cmake 输出到“build”目录?
问题描述
我正在使用 cmake 编译 C++ 项目,我希望 cmake 生成文件夹中的所有输出文件(Makefile
用于创建二进制文件的元文件)build
。我已经检查了如何将 cmake 输出转换为“bin”目录中的所有答案?,他们都没有为我工作(令人惊讶!)。文件是在根文件夹而不是文件夹中生成的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-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
运行的输出。
换句话说:您正在与工具作斗争。不要那样做。
推荐阅读
- python - 使用 Groupby 将 value_counts 存储在 Dask Dataframe 的新列中
- python - 在 matplotlib 中按数字顺序排列的观察数的数值分类数据的条形图
- javascript - Javascript 不替换或修改原始实例
- c# - 如何在listview中绑定listviewitem的内容?
- c++ - 读取 C++ vtable 的竞争条件。有可能吗?
- xamarin.forms - Skiasharp 旋转轮盘游戏。两物合谋
- javascript - Vue + Vuetify 服务器端渲染:CSS 在生产构建中导致`ReferenceError:文档未定义`
- python - 如何在这些类型的公式中找到“m”和“c”的值。?(公式:“Y = mxzw + c”)
- python - 在 Pytorch 中冻结单个权重
- android - 远程配置不会在 onStart() 重新获取数据