at test/functiontest/CMakeLists.txt:46 (target_link_libraries): The plain signat...
错误信息
CMake Error at test/functiontest/CMakeLists.txt:46 (target_link_libraries):
The plain signature for target_link_libraries has already been used with
the target "test_database". All uses of target_link_libraries with a
target must be either all-keyword or all-plain.
AI 解决方案
CMake Error at test/functiontest/CMakeLists.txt:46 (target_link_libraries):
The plain signature for target_link_libraries has already been used with
the target "test_database". All uses of target_link_libraries with a
target must be either all-keyword or all-plain.
CMake 错误于 test/functiontest/CMakeLists.txt:46 (target_link_libraries):
target_link_libraries 的普通签名已用于目标 "test_database"。
target_link_libraries 使用目标的所有调用必须全部是关键字风格或全部是普通风格。
原因分析:target_link_libraries 命令在同一个目标 (test_database) 上混合使用了不同风格的调用(普通签名和关键字签名)。
解决方案:
修改 test/functiontest/CMakeLists.txt 文件,确保所有对 target_link_libraries 的调用(针对 test_database 目标)都使用一致的签名风格。
如果之前使用的是普通签名(例如 target_link_libraries(target lib1 lib2)):
将所有对 test_database 的 target_link_libraries 调用统一为普通签名。
如果之前使用的是关键字签名(例如 target_link_libraries(target PRIVATE lib1 PUBLIC lib2)):
将所有对 test_database 的 target_link_libraries 调用统一为关键字签名。
例如,将第 46 行以及其他地方关于 test_database 的 target_link_libraries 调用,都修改为类似这样(假设之前的普通签名是 target_link_libraries(test_database OTHER_LIB),现在统一为关键字):
# 假设 OTHER_LIB 是一个库,需要链接
target_link_libraries(test_database PRIVATE OTHER_LIB)
或者,如果第 46 行是关键字签名,而之前有普通签名,则将之前的普通签名改为关键字签名。
最直接的修复方式是检查第 46 行以及 test_database 目标的所有 target_link_libraries 调用,并统一其语法。
预防措施:
- 保持一致性:在编写
CMakeLists.txt时,尽量在整个项目或模块中对target_link_libraries使用统一的签名风格,避免混合。 - 版本检查:注意 CMake 的版本更新可能会影响某些命令的行为或引入新的语法,在新版本中应查阅官方文档。