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

CMake如何将生成的lib.so文件指定输出到lib目录?

问题解决:CMake生成的lib.so未输出到指定lib目录

核心原因

你使用的LIBRARY_OUTPUT_PATH是CMake旧版本的废弃变量,在3.13及以后的版本中,官方推荐使用CMAKE_LIBRARY_OUTPUT_DIRECTORY替代。另外,变量设置时机错误(比如在添加子目录后才配置),也会导致规则不生效。

解决方案

以下是几种可行的修复方式,按推荐优先级排序:

1. 针对目标单独设置输出目录(最推荐)

这种方式仅作用于Library库,不会干扰其他目标的输出路径,灵活性更高。

可以在lib目录下的CMakeLists.txt中添加:

project(Library)
add_library(Library SHARED lib.cpp)
target_include_directories(Library PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})

# 指定该库的输出目录
set_target_properties(Library PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/../lib
)

或者在主CMakeLists.txt中配置:

# 先添加子目录加载库目标
add_subdirectory(lib)

# 为Library设置输出路径
set_target_properties(Library PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib
)

target_link_libraries(MyProject Library)

2. 使用全局推荐变量并调整设置时机

如果希望所有共享库都输出到指定目录,需确保在add_subdirectory之前设置全局变量:

主CMakeLists.txt修改为:

# 先设置全局共享库输出目录
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/lib)

# 再添加子目录,让子目录的库继承该规则
add_subdirectory(lib)

target_link_libraries(MyProject Library)

3. 针对不同构建类型设置(可选)

如果项目区分Debug/Release等构建类型,可分别配置对应类型的输出目录:

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_SOURCE_DIR}/lib/debug)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_CURRENT_SOURCE_DIR}/lib/release)

内容的提问来源于stack exchange,提问作者Сергей Малышев

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 21:57:39