Force CMake target_link_libraries to fail when adding nonexistent target
CMake有一个令人讨厌的默认值(我想我的CMake配置中没有什么神奇的东西,但是我可能对我不了解,因为我对CMake知之甚少),当您向项目中添加目标时,他默默地忽略了该行为。目标不存在,例如:
project(StackOverflow)
// another CMakeLists.txt
project (Stuff)
target_link_libraries(Stuff
PUBLIC StackOverlow )
是否可以强制CMake检查您在
如果链接ALIAS目标,则CMake可能会失败。例如
在第一个CMakeLists.txt中
1 2 | add_library(StackOverflow STATIC lib.cpp) add_library(StackOverflow::StackOverflow ALIAS StackOverflow) |
在第二个CMakeLists.txt中
1 | target_link_libraries(Stuff PUBLIC StackOverflow::StackOverflow) |
如果未定义StackOverflow :: StackOverflow,CMake将失败并显示错误。
https://cmake.org/cmake/help/v3.0/manual/cmake-buildsystem.7.html#alias-targets
在CMake中,您不将项目链接到其他项目。而是将目标链接到其他目标。
CMake目标仅通过一些命令(例如
此外,
- 库目标名称
- 库文件的完整路径
- 普通库名称
- 链接标志
- 生成器表达式
-
debug ,optimized 或general 关键字
它不接受项目名称,尽管如果您输入项目名称,它会在系统上使用该名称查找CMake目标或库文件。
要想知道我在想什么,请问:如果为
要在尝试链接目标之前检查其是否存在,可以执行以下操作:
1 2 3 | if (TARGET StackOverflow) target_link_libraries(Stuff PUBLIC StackOverflow) endif() |
如果您需要有关此命令功能的更多详细信息,我建议通读链接的