15
  • Ubuntu 12.04
  • CMake 2.8.9
  • PostgreSQL 9.2.2

我正在尝试让FindPostgreSQL模块找到/usr/include/postgresql/libpq-fe.h.

这是我的CMakeLists.txt

find_package(PostgreSQL REQUIRED)

这是我得到的错误:

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:97 (MESSAGE):
  Could NOT find PostgreSQL (missing: PostgreSQL_TYPE_INCLUDE_DIR) (found
  version "9.2.2")
Call Stack (most recent call first):
  /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:288 (_FPHSA_FAILURE_MESSAGE)
  /usr/share/cmake-2.8/Modules/FindPostgreSQL.cmake:155 (find_package_handle_standard_args)
  CMakeLists.txt:7 (find_package)

我在调用之前添加了以下几行,find_package但它似乎没有任何效果。

set(PostgreSQL_ADDITIONAL_VERSIONS "9.2.2")
set(PostgreSQL_ADDITIONAL_SEARCH_PATHS ${PostgreSQL_ADDITIONAL_SEARCH_PATHS} "/usr/include/postgresql")

我也尝试用谷歌搜索,PostgreSQL_TYPE_INCLUDE_DIR但没有找到任何东西。我还能尝试什么?

4

4 回答 4

34

确保您已经安装了libpq-dev\postgresql-server-dev-all(或特定版本,例如postgresql-server-dev-9.4

$ dpkg --get-selections | grep -e "libpq-dev\|postgresql-server-dev"

万一你错过了一些包裹

apt-get install libpq-dev postgresql-server-dev-all

应该修复它。

于 2016-10-13T17:23:07.230 回答
7

经过更多调试后,我发现它在尝试查找时卡住了pg_type.h

此文件位于/usr/include/postgresql/catalog/pg_types.h但模块希望在其中找到它/usr/include/postgresql/server/catalog/pg_types.h

find_path(PostgreSQL_TYPE_INCLUDE_DIR
  NAMES catalog/pg_type.h
  PATHS
   # Look in other places.
   ${PostgreSQL_ROOT_DIRECTORIES}
  PATH_SUFFIXES
    pgsql/server
    postgresql/server
    include/server
  # Help the user find it if we cannot.
  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
)

如果我添加postgresqlPATH_SUFFIXES

find_path(PostgreSQL_TYPE_INCLUDE_DIR
  NAMES catalog/pg_type.h
  PATHS
   # Look in other places.
   ${PostgreSQL_ROOT_DIRECTORIES}
  PATH_SUFFIXES
    postgresql
    pgsql/server
    postgresql/server
    include/server
  # Help the user find it if we cannot.
  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
)
于 2012-12-18T14:21:57.013 回答
7

cmake在 Ubuntu 上,您还可以通过如下定义调用来解决该问题PostgreSQL_TYPE_INCLUDE_DIR

cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/

请参阅此问题的错误报告 [1] 和潜在的修复 [2]。还可以在 [3] 上查看关于 debian 邮件列表中移动背后原因的讨论。

在 Ubuntu/Debian 上,从 PostgreSQL 9.3 开始,头文件pg_type.h 被移动到一个单独的包(从libpq-devto postgresql-server-dev),因此文件pg_type.h被移动到一个新位置

于 2017-10-08T15:58:20.627 回答
2

从带有 PostgreSQL 9.3 的 Linux Mint 17.3(“Rosa”)开始,我不得不调整 ilia choly 的解决方案(有趣的postgres是,列表中的建议条目已经存在于文件中,但不足以修复问题)。

我不得不/usr/share/cmake-2.8/Modules/FindPostgreSQL.cmake在第 114 行附近进行编辑并添加postgresql/9.3,以便find_path调用看起来像

find_path(PostgreSQL_TYPE_INCLUDE_DIR
  NAMES catalog/pg_type.h
  PATHS
   # Look in other places.
   ${PostgreSQL_ROOT_DIRECTORIES}
  PATH_SUFFIXES
    postgresql/9.3
    postgresql
    pgsql/server
    postgresql/server
    include/server
  # Help the user find it if we cannot.
  DOC "The ${PostgreSQL_INCLUDE_DIR_MESSAGE}"
)
于 2016-07-29T15:25:43.523 回答