FindPostgreSQL.cmake不适用于ubuntu

Ili*_*oly 10 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)
Run Code Online (Sandbox Code Playgroud)

这是我得到的错误:

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)
Run Code Online (Sandbox Code Playgroud)

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

set(PostgreSQL_ADDITIONAL_VERSIONS "9.2.2")
set(PostgreSQL_ADDITIONAL_SEARCH_PATHS ${PostgreSQL_ADDITIONAL_SEARCH_PATHS} "/usr/include/postgresql")
Run Code Online (Sandbox Code Playgroud)

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

Tom*_*art 19

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

$ dpkg --get-selections | grep -e "libpq-dev\|postgresql-server-dev"
Run Code Online (Sandbox Code Playgroud)

万一你错过了一些包裹

apt-get install libpq-dev postgresql-server-dev-all
Run Code Online (Sandbox Code Playgroud)

应该解决它.

  • 为我工作.比编辑`.cmake`文件好多了! (3认同)

Ili*_*oly 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}"
)
Run Code Online (Sandbox Code Playgroud)

如果我添加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}"
)
Run Code Online (Sandbox Code Playgroud)


Mar*_*rdy 5

在Ubuntu,你也可以通过调用解决该问题cmake与具有PostgreSQL_TYPE_INCLUDE_DIR这样的定义:

cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/
Run Code Online (Sandbox Code Playgroud)

有关此问题,请参见错误报告[1]和潜在的修复程序[2]。Álso在[3]上的debian mailinglist上看到了有关此举背后的原因的讨论。

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