at test/functiontest/CMakeLists.txt:46 (target_link_libraries): The plain signat...

2025年09月30日 18:02 响应: 5.66秒 状态: success

🚨 错误信息

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_databasetarget_link_libraries 调用统一为普通签名。

  • 如果之前使用的是关键字签名(例如 target_link_libraries(target PRIVATE lib1 PUBLIC lib2)

  • 将所有对 test_databasetarget_link_libraries 调用统一为关键字签名。

    例如,将第 46 行以及其他地方关于 test_databasetarget_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 的版本更新可能会影响某些命令的行为或引入新的语法,在新版本中应查阅官方文档。