Как мне сказать cmake, куда выводить данные его сборки? - PullRequest
3 голосов
/ 08 ноября 2011

Как мне сказать cmake, куда он должен выводить данные своей сборки?

Допустим, у меня есть каталог с исходным кодом под названием src /, а затем, поскольку cmake выводит много файлов, я бы хотел, чтобы он все это поместил в каталог называется build /. НО я бы хотел, чтобы он поместил сгенерированный Makefile в корень проекта, поэтому мне не нужно заходить в каталог сборки для создания приложения.

Возможно ли это с помощью cmake?

Мне удалось вытащить cmake, если я забавляюсь с cmake в директории сборки следующим образом:

cd build/
cmake ../src/
make
./hello 

Но было бы неплохо остаться в корне проекта и набрать что-то вроде этого

cmake
make 
./hello

Полагаю, мне нужно поместить CMakeList.txt в корень проекта с помощью магических команд, сообщающих ему, где он может поместить объектные файлы и где он может найти исходный код.

Спасибо


Обновление : Поскольку мой вопрос немного расплывчатый.

После того, как я выполнил команды cmake, я бы хотел, чтобы мое дерево выглядело так:

src/CMakeLists.txt
src/hello.c 
src/hello.h

build/CMakeCache.txt  
build/CMakeFiles/
build/cmake_install.cmake  

CMakeLists.txt
Makefile

Так что вопрос в том, как должен выглядеть CMakeLists.txt в этой настройке.

  • CMakeLists.txt
  • ЦСИ / CMakeLists.txt

Но может быть, это невозможно?

Ответы [ 4 ]

0 голосов
/ 15 февраля 2012

Просто используйте

cmake .
make

в вашем каталоге src.Точка (.) В Unix-системах указывает на текущий каталог.Имейте в виду, что делать это на самом деле не рекомендуется, так как в вашем каталоге src будет много файлов сборки, которые вам придется очищать позже или во время выпуска.

0 голосов
/ 08 ноября 2011

Хорошо, я получаю то, что вы хотите.Я думаю, вы можете достичь этого с помощью некоторого механизма в CMakeLists.txt.Конечно, это не вариант, если вы не являетесь разработчиком проекта.

В корневой CMakeLists.txt вы можете добавить команду file (WRITE ...), которая записывает Makefile в $ {CMAKE_SOURCE_DIR}.Этот Makefile будет содержать следующие команды для каждой цели:

<target>:
  cd ${CMAKE_BUILD_DIR} && ${CMAKE_MAKE_PROGRAM} <target>

Итак, теперь вы можете запустить make из исходного каталога, и он будет строить ваш проект в каталоге сборки.

0 голосов
/ 08 ноября 2011

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

cmake не предназначен для этого, как я знаю, НО вы можете остаться в корне проекта и набрать:make -C build./hello с пользовательскими правилами сборки или set_target_properties, вы можете заставить cmake поместить исполняемый файл результатов в каталог исходных текстов или использовать ./build/hello

Введите "cd build && cmake ..", который вам нужен только один разпосле этого make автоматически запустит cmake, если что-то изменилось.

0 голосов
/ 08 ноября 2011

cmake хочет, чтобы у вас был новый каталог сборки.

...