c++ - 无法链接CMake中的本地库

标签 c++ visual-studio cmake linker libraries

我正在Visual Studio上开发一个c++程序,该程序将部署在linux上,并通过ssh在linux上进行调试。当前,这是我的文件夹的结构:

ANT
-xscommon
--xscommon_config.h
-xscontroller
-xstypes
ANT.cpp
ANT.h
CMakeLists.txt
CMakeSettings.json
hashes.h
quaternionic.h
stars.h
目前,我认为我必须链接到的所有.h, .cpp, .o, .cpp.o, .a文件都保存在三个xs -------目录中。我对cmake并不陌生,与这些库的链接给我带来了麻烦。我能够正确链接到包含,但是当我不进行链接时会引发 undefined 的引用错误,并且当我尝试进行链接时会引发错误。这是我当前的CMakeLists.txt文件:
# CMakeList.txt : CMake project for ANT, include source and define
# project specific logic h"ere.
#
cmake_minimum_required (VERSION 3.8)

project ("ANT")

link_directories(${ANT_SOURCE_DIR}/xscommon xscontroller xstypes)

add_executable(
    ANT
    "ANT.cpp" 
    "ANT.h" 
    "quaternionic.h" 
    "stars.h"
    "hashes.h"
)

target_include_directories(ANT PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_link_libraries(ANT PUBLIC xscommon_config)
当我运行此命令时,构建器将显示以下内容:
/usr/bin/ld: cannot find -lxscommon_config
我需要在ANT.cpp所在的目录中查找这些库,因为这是它们的存放地,但是我什么也没做(而且我已经搞乱了几个小时的配置)会告诉camke在这些目录中查找这些库。 src文件夹。它总是转到/usr/bin/ld
我真的只需要知道告诉CMake的内容,这样它就可以在每个文件的正确位置进行查找,也就是说,如果我要告诉它寻找正确的文件(我可以肯定)。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
更新资料
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
因此,我将CMakeLists.txt文件重新制作为:
# CMakeList.txt : CMake project for ANT, include source and define
# project specific logic here.
#
cmake_minimum_required (VERSION 3.15)

project ("ANT")

#[STATIC | SHARED | MODULE]
#[STATIC | SHARED | MODULE]
#[STATIC | SHARED | MODULE]


add_library(xscommon SHARED IMPORTED)
add_library(xscontroller SHARED IMPORTED)
add_library(xstypes SHARED IMPORTED)

add_executable(
    ANT
    "ANT.cpp" 
    "ANT.h" 
)

target_include_directories(ANT PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
并且仍然获得 undefined 的引用。我将尝试构建库。此外,由于同事也无法修复此问题,因此我已经联系了使用此SDK的IMU的制造商。

最佳答案

问题是您要链接到尚未构建的库。
这个

# link to this directory
target_link_libraries(ANT PRIVATE xscommon)
尝试链接到目标ANT的名为xscommon的库,但您尚未在项目的任何地方构建xscommon。
如果xscommon是预构建库,而您只想导入它,则添加该库并设置IMPORTED target属性:
add_library(xscommon [STATIC | SHARED | MODULE] IMPORTED)
如果要在根CMakeLists.txt中构建xscommon。将xscommon添加为库,并包含标题的位置。
add_library(xscommon [STATIC | SHARED | MODULE]
    xxx/xxx.cpp #list all source files that build the library - use relative path
)
target_include_directories(xscommon PRIVATE
   xxx/xxx #path to the location of library header files
)
另外,添加可执行文件时不需要添加头文件。所以这
add_executable(
    ANT
    "ANT.cpp" 
    "ANT.h" 
    "quaternionic.h" 
    "stars.h"
    "hashes.h"
)
可以简化为
add_executable(
    ANT
    "ANT.cpp" 
)

关于c++ - 无法链接CMake中的本地库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62871395/

相关文章:

c++ - cmake 不可见 Visual Studio 编译器

c++ - C++ 中的 AND 短裤

c# - IE6 : window. onresize 在 IIS 上工作,在 asp.net 开发服务器上崩溃

c++ - C++创建数据库的方法

c++ - GUI系统开发资源?

visual-studio - 如何在 Visual Studio 中为当前选择交换剪贴板内容

c# - 是否可以在 visual studio 2013 update 2 中创建一个新的 windows phone 8 项目?

c - 尝试制作 RabbitMQ C-master 项目时出错

c++ - 为依赖于 LLVM 的项目创建 CMakeLists

c++ - 使用 Xcode 和 CMake 构建 CUDA 库失败