FindPostgreSQL.cmake赢得';我不能在ubuntu上工作 Ubuntu 12.04 CMake 2.8.9 Postgresql 9.2.2
我试图让FindPostgreSQL.cmake赢得';我不能在ubuntu上工作 Ubuntu 12.04 CMake 2.8.9 Postgresql 9.2.2,cmake,libpq,Cmake,Libpq,我试图让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 (
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\u TYPE\u INCLUDE\u DIR
,但没有找到任何东西。我还可以尝试什么?经过一段时间的调试,我发现在查找pg\u 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\u后缀
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}"
)
从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}"
)
确保您已经安装了libpq-dev\
和postgresql-server-dev-all
(或特定版本,例如postgresql-server-dev-9.4
)
万一你丢失了一些包裹
apt-get install libpq-dev postgresql-server-dev-all
应该解决这个问题。在Ubuntu上,您也可以通过调用cmake
来解决这个问题,并将PostgreSQL\u TYPE\u INCLUDE\u DIR
定义为:
cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/
请参阅错误报告[1]了解此问题和可能的修复方法[2]。Á还可以参见debian邮件列表[3]中关于移动背后原因的讨论
在Ubuntu/Debian上,从PostgreSQL 9.3开始,头文件pg_type.h
移动到单独的包中(从libpq-dev
到postgresql-server-dev
)
因此,文件pg_type.h
被移动到一个新位置
- [1]
- [2]
- [3]
这几乎对我有帮助。Cmake运行,但似乎没有正确设置include目录路径。您的源代码找不到libpq fe.h
,是否存在问题?我对PostgreSQL的问题如此严重感到失望。@johnzachary它对我有用。您的libpq fe.h
live在哪里?为了帮助其他遇到此问题的人:因为我第一次不理解,只想指出此更改不需要在我们自己的CMake文件中进行,而需要在以下CMake模块中进行:/usr/share/CMake-2.8/Modules/FindPostgreSQL.CMake。在cmake 2.8.9的第119行附近。@Stéphane是的,我应该澄清这一点。对于任何人来说,如果安装了libpq dev
,但没有postgresql-server-dev-9.3
为我工作,也会发生此错误。比编辑.cmake
文件好得多!
cmake -DPostgreSQL_TYPE_INCLUDE_DIR=/usr/include/postgresql/