问题描述
我觉得我在这个问题上遗漏了一些关键想法。
我有一个库,我想为其创建 CMakeLists.txt 文件。我想用不同的应用程序链接它。
此库需要定义一个 conf.h
文件。应用程序必须提供这一点。图书馆期待它。 这种关系叫什么?
我目前在 CMakeLists.txt
中的解决方案是使用如下变量:
...
target_include_directories(lib PUBLIC
${CONF_DIR}
)
然后让应用程序定义 CONF_DIR。这很不酷,因为我不能有多个应用程序链接到它。
唯一的另一种选择是在应用程序文件夹中保留整个源库的副本,这也很不酷。
我希望最大限度地提高可重用性。 我该如何处理?
旁注:对于熟悉的人来说,有问题的库是 STM32Cube 的 HAL 库,讨厌的文件是 stm32h7xx_hal_conf.h
。
解决方法
您对此无能为力,因此您必须复制库代码。
头文件在库编译阶段使用,所以它的代码最终被硬连接到最终的二进制文件中。正因为如此,如果你想改变头文件中的一些参数,你需要从头开始重新编译库。
理想情况下,库应该以这样的方式重写,即可以在运行时使用一些额外的配置 API 动态设置标头中包含的所有参数。