我在下面放置了我的项目目录,所以当我执行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
答案 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
语句。