首页 > 解决方案 > CMAKE:找到一个共享(模块)库

问题描述

为什么如果mylib是静态库,则此语句有效,而如果它是动态(共享)库则无效:

find_library(_found mylib PATHS ${mydirs}) 

其中mydir保存目录列表,其中包含库(静态和共享)。

我想以与静态库相同的方式找到一个动态库(以使其接近可执行文件)。会有一个目录列表,但为了简单起见,首先必须使用一个简单的测试用例:

cmake_minimum_required(VERSION 3.21)

project(myproj)

add_executable(myproj main.cpp)
    
find_library(a a${CMAKE_STATIC_LIBRARY_SUFFIX} PATHS "c:/work/libs/debug")
find_library(b b${CMAKE_SHARED_LIBRARY_SUFFIX} PATHS "c:/work/libs/debug")

message("dll=" "${CMAKE_SHARED_LIBRARY_SUFFIX}")
message("dll=" "${CMAKE_STATIC_LIBRARY_SUFFIX}")

message("a=" "${a}")
message("b=" "${b}")
    

而且,目录结构是这样的:

c:/work (CMakeLists.txt_main.cpp)
   \_libs
        \_debug (a.lib b.dll)
         \_release (a.lib b.dll)

输出:

1>a=C:/work/libs/debug/a.lib
1>b=b-NOTFOUND
1>dll=.dll
1>dll=.lib

任何事物?

标签: cmake

解决方案


推荐阅读