Как сделать вывод cmake в каталог "build"? - PullRequest
0 голосов
/ 26 августа 2018

Я использую 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 version

➜  cmake-test cmake --version

cmake version 3.11.4

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

OS

Linux

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Отказ от ответственности: я рекомендую идти с ответом @ john-zwinck.

По умолчанию cmake использует текущий рабочий каталог в качестве каталога сборки и любой путь, который вы указываете в качестве исходного каталога.Таким образом, нормальный способ достижения вашей цели -

  • создать каталог сборки (mkdir build)
  • перейти туда (cd build)
  • вызвать cmake сsource dir в качестве аргумента (cmake path/to/source)

НО, насколько я знаю, не документировано в документации по cmake, а хранится только из соображений совместимости или для внутреннего использования, что некоторые люди используют,Флаги -B и -H

cmake -Hpath/to/source -Bpath/to/build

или даже из исходного каталога

cmake . -Bbuild

Важно: пробела после -B.

нет.
0 голосов
/ 26 августа 2018

Обычный способ сделать это, вместо того, чтобы изменять переменные для установки пути, это просто создать выходной каталог, изменить его и запустить оттуда cmake. Таким образом, вместо cmake . у вас обычно есть cmake .. или подобное.

Я понимаю первоначальный импульс сказать: «Но я ожидаю, что моя система сборки будет записывать вывод в другом месте». Но CMake обычно не используется так, как вы изначально ожидали, и другие люди, которые запускают вашу сборку CMake, не будут ожидать того, чего вы ожидали, поэтому, вероятно, лучше всего использовать встроенное поведение по умолчанию, которое вывод везде, где cmake был запущен.

Другими словами: вы боретесь с инструментом. Не делай этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...