如何使用cmake正确链接库?

时间:2020-09-04 07:45:43

标签: c++ c cmake

我在下面放置了我的项目目录,所以当我执行cmake build时,出现了一个链接器错误,我无法弄清。我收到一个找不到LIBD的链接器错误,尽管成功形成了LIBB并且APP可执行文件仅需要LIBB,为什么在尝试构建APP时却抛出了需要LIBD的链接器错误?

|---CMakeLists.txt <==== add_subdirectory(source) , add_subdirectory(apps)

|---build

|---include
    |---a.h
    |---b.h

|---apps|   
    |---CMakeLists.txt
    |---apps.cpp              1] target_link_libraries(APP PUBLIC LIBB)   <==== linker error 
                                                                                 LIBD not found
  
|---source
|   |---CMakeLists.txt  ===>  1]link_directories(PATH TO LIBD)
                              2]target_link_libraries(LIBA public LIBC) <== successful
                              3]target_link_libraries (LIBB public LIBA LIBD) <== successful

    |---a.cpp
    |---b.cpp

|---lib
|   |---LIBD    <===== static library 

1 个答案:

答案 0 :(得分:1)

link_directories的范围是包含它的文件(在您的情况下为source/CMakeLists.txt,所以apps/CMakeLists.txt不知道在哪里可以找到LIBD。

您应该改为在主CMakeLists.txt中创建导入的CMake目标,并链接到需要的目标:

add_library(LIBD IMPORTED)
set_target_properties(LIBD PROPERTIES
    IMPORTED_LOCATION lib/LIBD.a)

或者,您也可以在link_directories中重复apps/CMakeLists.txt语句。