我正在尝试构build一个使用CMake作为构build系统的包(即libebur128),它依靠pkg-config
在系统中查找所需的包。
在build立所需的库之后,我发现CMake能够find其中的一个,但不能find其他的,尽pipe它们是以相同的方式构build的。
我怎么知道什么是错的? 有没有办法输出它正在做的testing,或者如何使用pkg-config
来定位软件包? 因为每次查找所有必需的软件包时手动使用pkg-config
起作用。
在这种情况下,这是一个用来定位一些东西的CMake脚本,libmpg123:
find_package(PkgConfig) pkg_check_modules(PC_MPG123 QUIET libmpg123) find_path(MPG123_INCLUDE_DIR mpg123.h HINTS ${PC_MPG123_INCLUDEDIR} ${PC_MPG123_INCLUDE_DIRS}) find_library(MPG123_LIBRARY NAMES mpg123 mpg123-0 HINTS ${PC_MPG123_LIBDIR} ${PC_MPG123_LIBRARY_DIRS}) set(MPG123_LIBRARIES ${MPG123_LIBRARY}) set(MPG123_INCLUDE_DIRS ${MPG123_INCLUDE_DIR}) include(FindPackageHandleStandardArgs) find_package_handle_standard_args(MPG123 DEFAULT_MSG MPG123_LIBRARY MPG123_INCLUDE_DIR) mark_as_advanced(MPG123_INCLUDE_DIR MPG123_LIBRARY)
注意:我正在交叉编译Windows,以防万一,我正在使用MinGW-w64工具链,并且已经调整了pkg-config
path以查找它应该在哪里。
如果有人像我这样绊倒了这个:
在modulees / FindPkgConfig.cmake中调用一些MESSAGE调用。 尤其是,在执行execute_process之前,如果您想转储pkg-config的调用方式。
现在,像我一样,你可能会惊讶于你的MESSAGE永远不会发生! 我学到的是,如果cmake在时间线早期检查某个其他包的依赖关系时调用pkg-config作为特定包,那么它发现的版本将被缓存在具有会话持久性的CMakeCache.txt中。 这意味着,如果你以后来更新这个包(因为其他一些依赖检查失败),那么CMakeCache.txt仍然保留旧的值,所以尽管你把头发拉出来,cmake也会出错,因为版本或者其他什么都不正确。
简单地说,如果你更新任何包作为尝试获取cmake错误的一部分,删除CMakeCache.txt。
您可以使用message命令显示变量的内容,并使用以下命令调用cmake:
cmake --debug-output ...
或者你可以编辑文件CMakeCache.txt
。
我还建议你包含下面这行,以便在编译时看到发生了什么。
set (CMAKE_VERBOSE_MAKEFILE true)