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,提问作者Сергей Малышев
相关产品推荐
相关产品推荐

