You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake构建含main函数与自定义testlib库的C项目报错求助

问题原因排查

  • 第一处错误是add_library语法使用错误:add_library的第二个参数应为库类型(STATIC/SHARED/INTERFACE),你错误填入了仅用于目标属性传递的关键字PUBLIC,导致CMake将PUBLIC识别为待查找的源文件,直接报找不到源文件、目标无源码的错误。
  • 第二处链接错误是你后续调整CMake配置时操作失误,将头文件testlib.h加入了链接依赖列表,链接器会把它当成库文件查找,自然找不到-ltestlib.h对应的库。
  • 额外存在的问题:你给全C语言的项目目标result指定了LINKER_LANGUAGE CXX,无意义还可能引发链接兼容问题;另外你给出的main.c代码末尾缺少}闭合符,编译时会报语法错误。

修正后的CMakeLists.txt

cmake_minimum_required(VERSION 3.0)
project(WTF C) # 明确指定C语言项目,避免不必要的CXX检测

add_executable(result main.c)
set_target_properties(result PROPERTIES
    C_STANDARD 11
    C_STANDARD_REQUIRED ON
    C_EXTENSIONS OFF
)

# 编译自定义静态库
add_library(testlib STATIC testlib.h testlib.c)
# 给testlib设置自身的头文件搜索路径,依赖它的目标会自动继承该路径
target_include_directories(testlib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

# 最终可执行文件链接自定义库即可
target_link_libraries(result PRIVATE testlib)

其他必要修改

补全main.c末尾的}符号,修正语法错误即可正常编译运行。如果后续需要用到libs子目录下的第三方库,再新增对应target_include_directories配置即可。

内容的提问来源于stack exchange,提问作者t1fpga1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 12:06:01