簡體   English   中英

cmake - 未定義的引用

[英]cmake - undefined reference to

我是cmake新手,知道以前有人問過這個問題,但仍然找不到我做錯了什么。 我有一個帶有文件夾/includelib的外部庫。 /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_link_libraries將庫的源文件鏈接到我的項目,但肯定缺少某些東西,但是什么? 我仍然收到錯誤undefined reference to xxxxxx

我試圖包含在我的項目中的庫是https://github.com/libtrading/libtrading

嗯,我會試試的。

首先,您似乎是在包含頭文件的文件夾上調用link_directories() ,而應該使用它來指定在其中搜索.

其次, target_link_libraries() 共享/靜態庫文件的絕對路徑作為第二個參數,同時傳遞目錄路徑(好吧,看起來是這樣)。

target_link_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})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM