我在 QT Creator 中创建了一个非 Qt 项目,Plain C++ Application。我目前的文件夹结构是这样的:
.
├── client
│ ├── client.cpp
│ └── client.h
├── CMakeLists.txt
├── CMakeLists.txt.user
├── main.cpp
└── server
├── server.cpp
└── server.h
我的 CMakeLists.txt 文件如下所示:
cmake_minimum_required(VERSION 3.5)
project(eshraagh-project LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(eshraagh-project main.cpp server/server.h server/server.cpp client/client.h client/client.cpp)
在我的主文件中,我包含了 server.h 和 client.h 并创建了它们的实例,并且没有给出任何错误。
当我尝试使用外部库 (this library) 时出现问题。我不知道如何使用它。
我尝试将其 src 文件夹(cpnet-export.h、cpnet-network.h 和 cpnet-network.c)的内容复制到我的项目中并将它们添加到 CMakeLists,就像我对服务器和客户端文件所做的一样,但它不起作用。我复制了存储库的服务器部分并将其粘贴到我的主目录中,但它给了我诸如 undefined reference to 'cpnet_bind'
之类的错误(一点注意:存储库使用带有 net 前缀的函数,但 QT 推荐者告诉我写cpnet 前缀。我不知道为什么会这样。
答案 0 :(得分:1)
在 CMake
中链接可执行文件的库是通过使用 target_link_libraries
函数实现的。就你而言,
target_link_libraries(eshraagh-project PRIVATE cpnet)
这里,cpnet 可以是您 CMake
项目知道的目标的名称(否则,它会变成某种特定于平台的 -lcpnet
链接器标志)。为了让CMake
了解cpnet
库,您可以
submodule
,或通过自己跟踪它们),在此示例中,假设它们的源位于 lib/cpnet
因此在您的顶级 CMakeLists.txt
中:
add_subdirectory(lib/cpnet)
请注意,这必须在调用 target_link_libraries
之前完成。