1

我有两个包在同一个 catkin 工作区下

我有包 A 和包 B,其中 B 需要获取 A 的包含文件和库文件。

CMakeLists.txtA 中,我有

set(TEST_VAR "TEST")

configure_package_config_file(
  fooConfig.cmake.in
  ${CMAKE_CURRENT_BINARY_DIR}/fooConfig.cmake
  INSTALL_DESTINATION ...
  PATH_VARS
  TEST_VAR)

并定义fooConfig.cmake.in如下

set(foo_VERSION 0.0.1)
@PACKAGE_INIT@
set_and_check(foo_TEST "@PACKAGE_TEST_VAR@")

check_required_components(foo)

使用上面的代码集,我应该可以使用find_packageB 中的关键字

find_package(foo REQUIRED)

在我期望的情况下, foo_LIBRARIES不应为空(自动填写), foo_TEST也不应为空,因为我通过提供PATH_VARS

但我看到了以下结果

${foo_FOUND} - TRUE
${foo_TEST} - EMPTY !!!
${foo_INCLUDE_DIRS} - .../build/foo/usr/include
${foo_LIBRARIES} - EMPTY !!!

为了更深入地了解该行为,我直接添加message了生成fooConfig.cmake和打印出来的foo_TEST变量。但是,我注意到它是空的。

总而言之,我想了解

  1. 为什么${foo_LIBRARIES}没有正确设置
  2. 是否${foo_TEST}预期 B 的 CMakeLists.txt 内为空。
  3. 为什么${foo_TEST}里面不可用cmake.in

谢谢

4

0 回答 0