cmake
config_error
ai_generated
true
CMake 错误:INTERFACE_LIBRARY 目标只能具有 INTERFACE 属性。目标 "mylib" 的 SOURCES 属性是不允许的。
CMake Error: INTERFACE_LIBRARY targets may only have INTERFACE properties. The SOURCES property of target "mylib" is not allowed.
ID: cmake/interface-library-sources-ignored
92%修复率
88%置信度
1证据数
2023-03-15首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| CMake 3.10 | active | — | — | — |
| CMake 3.16 | active | — | — | — |
| CMake 3.22 | active | — | — | — |
| CMake 3.27 | active | — | — | — |
根因分析
尝试在 INTERFACE 库目标上设置源文件,而根据定义,INTERFACE 库不能有编译源文件。
English
Attempting to set source files on an INTERFACE library target, which by definition cannot have compile sources.
官方文档
https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#interface-libraries解决方案
-
Remove SOURCES from the INTERFACE library. If you need compiled sources, use add_library(mylib STATIC ...) or add_library(mylib SHARED ...) instead.
-
If you need both interface properties and compiled sources, create two targets: an INTERFACE library for headers and a STATIC/SHARED library for sources, then link them.
无效尝试
常见但无效的做法:
-
Adding SOURCES property with set_property(TARGET mylib PROPERTY SOURCES ...) to work around the error
95% 失败
INTERFACE libraries are header-only or pure-interface; they have no compiled sources, so setting SOURCES violates the target type.
-
Changing the target type to STATIC or SHARED but keeping the same interface logic
70% 失败
Changing target type changes the build semantics; INTERFACE libraries are intended for header-only or transitive dependencies, not compiled code.
-
Deleting the target entirely and re-adding it with sources as a different target
80% 失败
This loses the interface propagation properties and may break dependency chains.