PkgConfig模块:INCLUDE_DIRS未列出所有目录

时间:2018-05-23 13:47:32

标签: c++ cmake pkg-config

短版(TL; DR)

在PkgConfig模块中使用CMake我尝试打印我项目所需库的所有包含目录,我们称之为thelibrary。我通过打印THELIBRARY_INCLUDE_DIRS变量的值来完成此操作。打印包含目录列表,但缺少一个目录。

这真的让我感到惊讶,好像我在终端上键入以下内容:

pkg-config thelibrary --cflags

然后所有打印包含目录,包括 THELIBRARY_INCLUDE_DIRS中缺少的目录。

如果我尝试打印THELIBRARY_CFLAGS的值,也会发生同样的情况。

这怎么可能?哪里出错了? (希望这是我的错误)

详细

上下文

我正在开发一个C ++ Cmake项目,该项目在Mac OS下正确编译,但不在Linux下(Ubuntu),在调查可能的原因时我发现了下面的问题。

问题

我在文件PkgConfig中加入了CMakeLists.txt模块:

find_package(PkgConfig REQUIRED)    

之后,为了使用该库,我通过写入来设置PKG_CONFIG_PATH环境变量:

set(ENV{PKG_CONFIG_PATH} "/usr/local/opt/thelibrary/pkgconfig:$ENV{PKG_CONFIG_PATH}")

最后,我将此指令用于搜索库。

pkg_check_modules(THELIBRARY thelibrary)

最后,为了进行调试,我尝试通过编写:

来打印包含目录的列表
MESSAGE( STATUS "THELIBRARY DIRS: " ${THELIBRARY_INCLUDE_DIRS} )

问题是,工作,实际上它打印了一个包含目录的列表,但问题是最重要的一个丢失了。实际上,输出类似于:

/opt/auxlib1/include/opt/auxlib2/include ...

其中auxlib1auxlib2等是辅助包含我需要编译的目录。

但我也期望输出中的目录/opt/thelibrary/include,如果我在开头使用终端上的pkg-config命令,则打印出来。怎么可能只打印那个目录呢?

1 个答案:

答案 0 :(得分:0)

感谢Tsyvarev的建议(删除CMakeCache.txt),我理解原因是什么,因为这可能发生在其他人身上,我希望这个解释有所帮助。

目录/opt/thelibrary/include未出现在THELIBRARY_INCLUDE_DIRS中的原因是该文件 CMakeCache.txt 包含有关以前版本的信息库的库,其头文件安装在名称略有不同的目录中,当已卸载时,已删除

由于该目录不再存在,因此它不会出现在THELIBRARY_INCLUDE_DIRS中,并且新目录不会仅仅因为文件CmakeCache.txt仍然指向先前版本而出现。

解决方案:删除CmakeCache.txt并重新运行cmake

相关问题