2017-08-11 39 views
-1

我是cmake的新手,知道这个问题之前已经被问过了,但是还是找不到我做错了什么。我有一个外部库文件夹/includelib/include文件夹包含所有标题(.h)和/lib文件夹包含所有源文件(.c)。cmake - undefined参考

在我的项目我有这个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_link_libraries到库的源文件链接到我的项目,但肯定缺少的东西,但什么?我仍然收到错误undefined reference to xxxxxx

我想包括在我的项目中的库是https://github.com/libtrading/libtrading

回答

0

嗯,我会试试。

首先,看起来你打电话给link_directories()就是包含头文件的文件夹,而it should be used in order to specify the path where to search libraries for

其次target_link_libraries()takes the absolute path作为第二个参数的共享/静态库文件,当你传递目录路径(好吧,似乎是这样)。

target_link_libraries()未链接到“库的源文件”, - 它链接到已编译的共享/静态库blob。

而且,我也建议你到可执行文件的名称保存到变量,这样你不就能够输错对象名称,例如:

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

如你所知,我们需要编译所有源文件。所以我们需要指出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}) 
+0

是否'file'命令使用相对或绝对目录? –

+0

[相对路径](https://cmake.org/cmake/help/v3.0/command/file.html) – GAVD

+0

似乎我需要将库添加为主项目的子目录。这是否是唯一的方法来做到这一点? –