如何创建需要外部头文件的 cmake 库

问题描述

我觉得我在这个问题上遗漏了一些关键想法。

我有一个库,我想为其创建 CMakeLists.txt 文件。我想用不同的应用程序链接它。

此库需要定义一个 conf.h 文件。应用程序必须提供这一点。图书馆期待它。 这种关系叫什么?

我目前在 CMakeLists.txt 中的解决方案是使用如下变量:

...
target_include_directories(lib PUBLIC
${CONF_DIR}
)

然后让应用程序定义 CONF_DIR。这很不酷,因为我不能有多个应用程序链接到它。

唯一的另一种选择是在应用程序文件夹中保留整个源库的副本,这也很不酷。

我希望最大限度地提高可重用性。 我该如何处理?

旁注:对于熟悉的人来说,有问题的库是 STM32Cube 的 HAL 库,讨厌的文件stm32h7xx_hal_conf.h

enter image description here

解决方法

您对此无能为力,因此您必须复制库代码。

头文件在库编译阶段使用,所以它的代码最终被硬连接到最终的二进制文件中。正因为如此,如果你想改变头文件中的一些参数,你需要从头开始重新编译库。

理想情况下,库应该以这样的方式重写,即可以在运行时使用一些额外的配置 API 动态设置标头中包含的所有参数。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...