сделать cmake изменить в бинарный каталог - PullRequest
3 голосов
/ 14 января 2010

Допустим, у меня есть проект, в котором я уже запустил 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

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

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

Ответы [ 2 ]

7 голосов
/ 14 января 2010

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

make -C your_build_directory
0 голосов
/ 16 января 2010

Другой подход заключается в создании еще одного файла 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")

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

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