在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 ...
其中auxlib1
,auxlib2
等是辅助包含我需要编译的目录。
但我也期望输出中的目录/opt/thelibrary/include
,如果我在开头使用终端上的pkg-config
命令,则打印出来。怎么可能只打印那个目录呢?
答案 0 :(得分:0)
感谢Tsyvarev的建议(删除CMakeCache.txt
),我理解原因是什么,因为这可能发生在其他人身上,我希望这个解释有所帮助。
目录/opt/thelibrary/include
未出现在THELIBRARY_INCLUDE_DIRS
中的原因是该文件 CMakeCache.txt
包含有关以前版本的信息库的库,其头文件安装在名称略有不同的目录中,当已卸载时,已删除。
由于该目录不再存在,因此它不会出现在THELIBRARY_INCLUDE_DIRS
中,并且新目录不会仅仅因为文件CmakeCache.txt
仍然指向先前版本而出现。
解决方案:删除CmakeCache.txt
并重新运行cmake
。