Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Изменить cmake на двоичный каталог

Автор вопроса: paleozogtОтветов: 2

Допустим, у меня есть проект, в котором я уже запустил CMake в каталоге .build:

project/
    .build/
    .src

В настоящее время я должен сделать это, чтобы запустить сборку:

cd .build
make

Я хотел бы иметь возможность запускать make из корня моего проекта, возможно, с помощью

make -f ./build/Makefile

но это не работает. Я получаю такие ошибки

make[1]: CMakeFiles/Makefile2: No such file or directory
make[1]: *** No rule to make target `CMakeFiles/Makefile2'.  Stop.
make: *** [all] Error 2

Это связано с тем, что Makefile, сгенерированный CMake, предполагает, что его рабочий каталог совпадает с его местонахождением (.build).

Возможно ли, чтобы CMake сгенерировал make-файл, чтобы make-файл менял рабочий каталог на то место, где он находится?

cmake

Ответы

Ответ 1 · Christopher Bruns

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

all:
       cd ./build;  make $(MFLAGS)

Затем вы можете просто ввести "make" из каталога верхнего уровня.

Я не думаю, что есть способ заставить cmake создать Makefile, который можно запустить из любого места. Это просто не то, как make обычно используется.

Но вы можете уговорить cmake создать дополнительный вспомогательный make-файл в корневом каталоге вашего проекта с помощью cmake, подобного следующему в CMakeLists.txt:

configure_file(ProjectRootMakefile.in ${CMAKE_SOURCE_DIR}/Makefile @ONLY)

(При необходимости замените это "${CMAKE_SOURCE_DIR}" выражением, которое разрешается в корневой каталог вашего проекта)

И вам нужно создать файл ProjectRootMakefile.in в вашем исходном дереве с таким содержимым:

all:
       cd @CMAKE_BINARY_DIR@; make $(MFLAGS)

который будет использоваться в качестве шаблона для корневого Makefile вашего проекта. (Убедитесь, что вы используете символ табуляции, а не пробелы, перед "cd")

Я не проверял эти предложения, но их должно быть достаточно, чтобы дать вам общее представление.

Ответ 2 · рейтинг 7 · YuppieNetworking

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

make -C your_build_directory

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы