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

CMake使用target_link_libraries时移除.lib扩展名,如何阻止该行为?

解决CMake在Ubuntu下使用TI tiarmclang时保留.lib库后缀的问题

CMake在类Unix系统(如Ubuntu)中默认将.lib视为Windows专属的库后缀,因此解析target_link_libraries中的库名时会自动剥离该后缀,生成-lsome_library这类链接参数,但TI的tiarmclang/tiarmlnk链接器在Ubuntu环境下需要保留.lib后缀才能定位到目标库。以下是几种可行的解决方案:

方案1:使用链接器-l:语法指定完整库名

TI的tiarmclang兼容GCC风格的链接器参数,通过-l:filename可强制链接器使用完整库文件名,跳过后缀处理。修改CMake配置如下:

target_link_directories(my_target PRIVATE
  /path/to/lib
)

target_link_options(my_target PRIVATE -l:some_library.lib)

方案2:用find_library定位完整库文件路径

通过find_library直接找到目标库的完整路径,再传递给target_link_libraries,CMake不会对完整路径的库文件做后缀处理:

find_library(SOME_LIBRARY
  NAMES some_library.lib
  PATHS /path/to/lib
  NO_DEFAULT_PATH
)

target_link_libraries(my_target PRIVATE ${SOME_LIBRARY})

方案3:修改CMake的库后缀识别规则

将.lib添加到类Unix系统下的默认库后缀列表,让CMake将其视为合法的Unix库后缀,从而保留该后缀:

# 在项目顶层CMakeLists.txt开头添加
if(UNIX AND NOT APPLE)
  list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".lib")
endif()

# 原链接配置保持不变
target_link_directories(my_target PRIVATE
  /path/to/lib
)

target_link_libraries(my_target PRIVATE some_library.lib)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 07:58:17