FindPostgreSQL.cmake不适用于ubuntu

时间:2012-12-17 19:00:37

标签: cmake libpq

  • 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")

我也尝试使用Google搜索PostgreSQL_TYPE_INCLUDE_DIR,但没有找到任何内容。我还能尝试什么?

4 个答案:

答案 0 :(得分:15)

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

postgresql-server-dev-9.4

如果您错过了某个套餐

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

应该修复它。

答案 1 :(得分: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}"
)

如果我将postgresql添加到PATH_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}"
)

答案 2 :(得分:4)

在Ubuntu上,您也可以通过调用cmakePostgreSQL_TYPE_INCLUDE_DIR定义如下来解决该问题:

cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/

请参阅此问题的错误报告[1]和可能的修复[2]。 Álso在[3]上看到有关移动debian邮件列表的原因的讨论。

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

答案 3 :(得分:2)

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

我必须围绕第114行修改/usr/share/cmake-2.8/Modules/FindPostgreSQL.cmake并添加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}"
)