C++ cmake-对的未定义引用

C++ cmake-对的未定义引用,c++,c,cmake,C++,C,Cmake,我是新来的cmake,知道以前有人问过这个问题,但仍然找不到我做错了什么。我有一个带有文件夹/include和lib的外部库。/include文件夹包含所有标题(.h),而/lib文件夹包含所有源(.c)文件 在我的项目中,我有一个CMakeList.txt文件: cmake_minimum_required(VERSION 3.7) project(FirstAttempt) set(CMAKE_CXX_STANDARD 11) set (EXTRA_LIBS "D:\\libtradin

我是新来的
cmake
,知道以前有人问过这个问题,但仍然找不到我做错了什么。我有一个带有文件夹
/include
lib
的外部库。
/include
文件夹包含所有标题(
.h
),而
/lib
文件夹包含所有源(
.c
)文件

在我的项目中,我有一个
CMakeList.txt
文件:

cmake_minimum_required(VERSION 3.7)
project(FirstAttempt)

set(CMAKE_CXX_STANDARD 11)

set (EXTRA_LIBS "D:\\libtrading")

include_directories(${EXTRA_LIBS}/include)
link_directories(${EXTRA_LIBS}/include)

set(SOURCE_FILES main.cpp)
add_executable(FirstAttempt ${SOURCE_FILES})

target_link_libraries (FirstAttempt  ${EXTRA_LIBS}/lib)
我知道我必须使用
target\u link\u libraries
将库的源文件链接到我的项目,但是肯定缺少一些东西,但是什么呢?我仍然收到错误
对xxxxxx的未定义引用

我试图在我的项目中包含的库是。

好吧,我试试

首先,您似乎正在对包含头文件的文件夹调用
link\u directories()
,而

其次,在传递目录路径时,将共享/静态库文件的
target\u link\u libraries()
作为第二个参数

target\u link\u libraries()
不链接到“库的源文件”—它链接到已编译的共享/静态库blob

而且,我还建议您将可执行文件的名称保存到变量中,这样您就不会误键入目标名称,如下所示:

set(TARGET FirstAttempt)
add_executable(${TARGET})

正如您所知,我们需要编译所有源文件。因此,我们需要指出Cmake知道源文件的位置/内容

我认为你应该像这样添加所有源文件

file(GLOB SOURCES_FILES "lib/*.c" main.cpp)
添加所有.c文件

或者,您可以单独添加所有lib/*.c文件

file(SOURCES_FILES_LIBS "lib/*.c")
set(SOURCES_FILES main.cpp)
add_executable(FirstAttempt ${SOURCES_FILES_LIBS} ${SOURCES_FILES})

file
命令使用相对目录还是绝对目录?似乎我需要将库添加为主项目的子目录。这是唯一的办法吗?