通过CMAKE将配置文件作为静态库的一部分

时间:2018-11-27 12:19:28

标签: c++ cmake static-libraries

我需要将配置文件作为我的静态库的一部分,这意味着如果某些项目链接到我的静态库,则应将配置文件复制到该项目的自动构建目录中。对于引用静态库的所有项目,此行为都应该相同。

这是我要实现的目标:

libabc
   abc.cfg
project1
   build
      abc.cfg  -- Because project1 references static library libabc

我不想为每个项目更改CMakeLists.txt

1 个答案:

答案 0 :(得分:0)

要知道某个库是否为链接,可以使用get_property()获取到目标的所有链接库的列表,并搜索LINK_LIBRARIES属性。

使用get_property(),您将获得链接库的列表。您可以使用string()进行搜索。

然后,当找到链接的库时,可以使用file()将配置文件复制到相应的文件夹中。

您会收到类似的代码

get_property(MY_LINKED_LIBRARIES TARGET ${MY_TARGET} PROPERTY LINK LIBRARIES)
string(FIND ${MY_LINKED_LIBRARIES} ${MY_LIBRARY_NAME} LIBRARY_FIND)
if (LIBRARY_FIND NOT EQUAL -1)
    file (COPY "abc.cfg" DESTINATION "${MY_LIBRARY_NAME}/abc.cfg")
endif ()

为所有库提供for循环。