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
相关产品推荐
相关产品推荐

