如何从cmake find_package检索包含目录?

时间:2019-01-29 09:27:30

标签: cmake

我已经编写了一个使用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或关联的生成器表达式似乎是执行此操作的唯一方法。

0 个答案:

没有答案