在我的项目中,我依赖一个名为foo的第三方共享库。
foo本身依赖于其他一些第三方dll (让我们称之为bar.dll),然而,我的项目既没有使用它,也没有在foo的头中公开它。
foo目标被创建并链接到我的项目,如下所示
代码语言:javascript复制add_library(foo SHARED IMPORTED)
set_target_properties(foo PROPERTIES
IMPORTED_LOCATION "${foo_dll_path}"
IMPORTED_IMPLIB "${foo_lib_path}"
)
target_link_libraries(my_project PUBLIC foo)稍后,将触发post构建事件,通过$
如何在此设置中引入bar.dll以在$
到目前为止,我尝试将bar.dll添加为另一个通过add_library(bar UNKNOWN IMPORTED)和add_library(bar SHARED IMPORTED)导入的目标,并相应地在bar上设置IMPORTED_LOCATION,但这确实会创建链接器错误。示例:
代码语言:javascript复制add_library(bar UNKNOWN IMPORTED)
set_target_properties(bar PROPERTIES
IMPORTED_LOCATION "${bar_dll_path}"
)
target_link_libraries(foo INTERFACE bar)在UNKNOWN的情况下,链接器将使用bar.dll作为链接器输入,如果SHARED IMPORTED CMake要求设置IMPORTED_IMPLIB,当然会失败,但我既没有bar.dll的导入库,也不想将my_project链接到它。
还有其他的建议如何处理吗?