我有一个大型项目,由多个构建目标组成,它们之间具有依赖关系。结构类似于这样:
Application <-- Library I <--- Library II
<-- Library III <---|
<-- Library IV
存在多个这样的应用程序,它们使用分布在不同库中的共享代码。
在项目中,CMake 用于确保正确的包含路径和各个库之间的链接。
使用 add_library("Library II") 设置库,随后其他项目使用 target_link_libraries("Library I" "Library II") 获取依赖项。
这在大多数情况下都有效。但是,有时找不到某些依赖项。我怀疑在某些情况下“图书馆 I”是未知的。但是,如果库未知,则 target_link_libraries() 不会引发错误。该错误仅在编译/链接时才会出现。
我想在运行 cmake 时验证是否已找到所有库。如果在那个阶段不知道某件事,我想抛出一个错误并通知开发人员。
我尝试使用 find_libraries() 但根据我的理解,这会查找某个文件。但是,在我的情况下,该文件只会在编译阶段进行编译,因此运行 cmake 时该文件不存在。
检查图书馆target,不是文件:
if(NOT TARGET library_2)
message(SEND_ERROR "Attempt to link to non-existent library 'library_2'.")
endif()
target_link_libraries(library_1 library_2)
也可以看看那个问题关于检查目标。
请注意,此方法仅在以下情况下才有效
add_library(library_2)
出现在之前
target_link_libraries(library_1 library_2)
CMake 允许(并正确处理)相反的顺序,但我发现在库创建和链接之间要求直接顺序是一种很好的风格。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)