我正在尝试让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
,但没有找到任何内容。我还能尝试什么?
答案 0 :(得分:15)
确保您已安装Delayed_Job
和libpq-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上,您也可以通过调用cmake
并PostgreSQL_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-dev
到postgresql-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}"
)