我觉得我错过了一些关键的想法与此一个。
我有一个库,我想为它创建一个CMakeLists.txt文件。我想用不同的应用程序链接它。
此库需要定义一个conf.h
文件。应用程序必须提供此文件。库需要此文件。此关系的名称是什么?
我目前在CMakeLists.txt
中的解决方案是有一个如下所示的变量:
...
target_include_directories(lib PUBLIC
${CONF_DIR}
)
然后让CONF_DIR由应用程序定义。这很不酷,因为我不能让多个应用程序链接到它。
唯一的其他选择是在应用程序文件夹中保存整个源代码库的副本,这也不酷。
我希望最大限度地提高可重用性。我如何实现这一点?
旁注:对于熟悉的人来说,这个库是STM32Cube的HAL库,讨厌的文件是stm32h7xx_hal_conf.h
。
2条答案
按热度按时间tzxcd3kk1#
当库需要配置时,这是一种非常常见的方法。FreeRTOS是另一个例子。
我看不出从应用程序的
CMakeLists.txt
修改库的target_include_directories
有什么问题。通常,我创建一个函数来处理库的设置。调用点看起来像这样:
EXTRA_INCLUDES
参数的内容被推送到静态库的target_include_directories
中。nqwrtyyt2#
您对此无能为力,因此必须复制库代码。
头文件是在库编译阶段使用的,所以它的代码最终被硬连接到最终的二进制文件中。因此,如果你想从头文件中更改一些参数,你需要从头开始重新编译库。
理想情况下,应该以这样的方式重写库,即可以在运行时期间使用一些附加的配置API动态地设置头部中包含的所有参数。