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)):
将所有对 - 如果之前使用的是关键字签名(例如
target_link_libraries(target PRIVATE lib1 PUBLIC lib2)):
test_database 的 target_link_libraries 调用统一为普通签名。
将所有对
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 使用统一的签名风格,避免混合。