我已经编写了一个使用cmake构建的库(如果重要的话,当前使用3.5.1版本),现在我正尝试在另一个也使用cmake构建的项目中使用该库。
find_package
很好地找到了库,并创建了导出的目标,但不幸的是没有提供预期的<package>_INCLUDE_DIRS
变量。
不幸的是,我无法发布图书馆,但是例如pugixml存在相同的问题:
mkdir pugi
cd pugi
git clone https://github.com/zeux/pugixml.git .
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=~/temp ..
make install
到目前为止,一切都很好。但是,尝试find_package
:
find_package(pugixml REQUIRED)
message(STATUS ${pugixml_FOUND})
message(STATUS ${pugixml_INCLUDE_DIRS})
cmake -DCMAKE_INSTALL_PREFIX=~/temp ..
显示未设置预期的pugixml_INCLUDE_DIRS
变量:
-- 1
--
我发现我可以使用目标上的属性来检索include目录:
get_target_property(INCLUDE_DIRS pugixml INTERFACE_INCLUDE_DIRECTORIES)
message(STATUS ${INCLUDE_DIRS})
-- /home/username/temp/include
但是我从未见过cmake文件可以做到这一点。
在cmake中检索包的包含目录的正确方法是什么?
或者,需要在包的cmake文件中执行哪些操作,以使<package>_INCLUDE_DIRS
正确设置find_package
?
到目前为止,感谢您的提示,我越来越近了。
原来的问题是我正在创建一个中间对象库目标,该目标无法链接到库。 target_link_libraries
仅出现在最终的二进制文件中,但这可以理解不足以编译对象库以查找标头。
问题仍然存在:如何使对象库目标知道所找到程序包的包含路径?
不幸的是,标记的重复项只能解决相对较新版本的cmake(3.12或更高版本)的问题。对于较旧的版本,get_target_property
或关联的生成器表达式似乎是执行此操作的唯一方法。