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

