1

我正在尝试添加Postgresql作为我的项目的依赖项,我正在使用 ExternalProject 模块从 github 下载源代码并构建,但是从 cmake ( cmake --build .) 运行时构建步骤失败。配置步骤似乎成功了,如果我转到下的 Build 目录EP_BASE并执行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

我的外部项目添加如下所示:

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

4

2 回答 2

0

尝试

ExternalProject_Get_Property(postgresql_external install_dir)
include_directories(${install_dir}/include)

我猜,您还没有将include目录传播到您的目标,但它是 evtl。您的系统已知(因此成功调用手动调用make

于 2020-10-28T16:49:44.600 回答
0

试试下面的代码,它对我有用。PotgreSQL 使用 MAKELEVEL 变量通过 perl 生成头文件。当您直接调用 make 时,它​​会按预期工作。但似乎 cmake 为 PotgreSQL 的根 make 添加了更多级别,因此不会生成标头。

CONFIGURE_COMMAND ./configure <your options>
BUILD_IN_SOURCE 1
BUILD_COMMAND $(MAKE) MAKELEVEL=0
于 2022-01-24T10:23:28.913 回答