[英]cmake - undefined reference to
我是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_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.