#cmake #external-project #cmake-modules
#cmake #external-project #cmake-модули
Вопрос:
Я пытаюсь добавить Postgresql
в качестве зависимости для своего проекта, для которого я использую модуль ExternalProject для загрузки исходного кода с github и сборки, но этап сборки завершается неудачно при запуске из cmake ( cmake --build .
). Кажется, что шаг настройки выполнен успешно, и если я перейду в каталог сборки EP_BASE
и выполню a make
, он будет успешно выполнен. Я получаю следующую ошибку во время сборки:
<...>/Source/postgresql_external/src/common/relpath.c:21:10: fatal error: catalog/pg_tablespace_d.h: No such file or directory
21 | #include "catalog/pg_tablespace_d.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make[5]: *** [<builtin>: relpath.o] Error 1
make[4]: *** [Makefile:42: all-common-recurse] Error 2
make[3]: *** [GNUmakefile:11: all-src-recurse] Error 2
Мой внешний проект add выглядит следующим образом:
ExternalProject_Add(postgresql_external
GIT_REPOSITORY https://github.com/postgres/postgres.git
GIT_TAG REL_12_4
CONFIGURE_COMMAND <SOURCE_DIR>/configure --prefix=<INSTALL_DIR>
LOG_CONFIGURE 1
LOG_BUILD 1
LOG_INSTALL 1
)
Это работает на Ubuntu 20.04 LTS с cmake 3.16.3, gcc 9.3.0
Комментарии:
1. Удалось ли вам решить эту проблему?
Ответ №1:
попробуйте
ExternalProject_Get_Property(postgresql_external install_dir)
include_directories(${install_dir}/include)
Я предполагаю, что вы еще не распространили include
каталог на свою цель, но это evtl. известно вашей системе (таким образом, успешный вызов вызываемого вручную make
)
Комментарии:
1. Как это поможет во время сборки (пока нет установки)?
Ответ №2:
Попробуйте следующий код, он работает для меня. PotgreSQL использует переменную MAKELEVEL для генерации заголовочных файлов через perl. Когда вы вызываете make напрямую, он работает так, как ожидалось. Но, похоже, cmake добавляет больше уровней к корневому make в PotgreSQL, поэтому заголовки не генерируются.
CONFIGURE_COMMAND ./configure <your options>
BUILD_IN_SOURCE 1
BUILD_COMMAND $(MAKE) MAKELEVEL=0