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

zte4gxcn  于 2022-11-29  发布在  其他
关注(0)|答案(2)|浏览(122)

我觉得我错过了一些关键的想法与此一个。
我有一个库,我想为它创建一个CMakeLists.txt文件。我想用不同的应用程序链接它。
此库需要定义一个conf.h文件。应用程序必须提供此文件。库需要此文件。此关系的名称是什么?
我目前在CMakeLists.txt中的解决方案是有一个如下所示的变量:

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

然后让CONF_DIR由应用程序定义。这很不酷,因为我不能让多个应用程序链接到它。
唯一的其他选择是在应用程序文件夹中保存整个源代码库的副本,这也不酷。
我希望最大限度地提高可重用性。我如何实现这一点?
旁注:对于熟悉的人来说,这个库是STM32Cube的HAL库,讨厌的文件是stm32h7xx_hal_conf.h

tzxcd3kk

tzxcd3kk1#

当库需要配置时,这是一种非常常见的方法。FreeRTOS是另一个例子。
我看不出从应用程序的CMakeLists.txt修改库的target_include_directories有什么问题。
通常,我创建一个函数来处理库的设置。调用点看起来像这样:

add_stm32_hal_lib(
    PATH drivers/STM32H7xx_HAL_Driver
    EXTRA_INCLUDES path/to/config
)
# ...
target_link_libraries(app PUBLIC stm32_hal)

EXTRA_INCLUDES参数的内容被推送到静态库的target_include_directories中。

nqwrtyyt

nqwrtyyt2#

您对此无能为力,因此必须复制库代码。
头文件是在库编译阶段使用的,所以它的代码最终被硬连接到最终的二进制文件中。因此,如果你想从头文件中更改一些参数,你需要从头开始重新编译库。
理想情况下,应该以这样的方式重写库,即可以在运行时期间使用一些附加的配置API动态地设置头部中包含的所有参数。

相关问题