2016-01-23 80 views
1

我一直在嘗試下載和構建Stanford Library源文件,並使用CLion(IDE)爲我自己的項目構建一個庫。我一直在關注從this答案說明和我CMakeLists文件看起來像這樣:試圖在CLion/CMake中構建共享庫

cmake_minimum_required(VERSION 3.3) 
project(Stanford) 

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 
set(CMAKE_BUILD_TYPE Release) 


file(GLOB MyHeaders "*.h" /stacktrace/"*.h" private/"*.h") 
file(GLOB MySources "*.cpp" /stacktrace/"*.cpp" private/"*.cpp") 
include_directories(MyHeaders) 
add_library(Stanford SHARED ${MySources} ${MyHeaders}) 


target_include_directories (Stanford PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}) 

當打開運行菜單,我得到如下:Screenshot 1

如果我告訴它來建立反正我得到的以下錯誤。

enter image description here

我一直在努力找出爲什麼我需要一個可執行文件建立一個圖書館以及這些未定義的引用的意思。

+0

只有在IDE(CLion)中運行程序時才需要執行程序。由於您的項目僅包含庫,因此您無需在「可執行文件」字段中指定任何內容。像往常一樣,未定義的引用意味着您的內置庫中沒有任何源代碼包含這些函數的定義。 (而不是在'file(GLOB)'中的'/ stacktrace /'應該是'stacktrace /')。 – Tsyvarev

+0

噢,你對可執行文件是正確的,我還不清楚爲什麼我得到未定義的引用,實際上IDE(自動完成)會看到這些引用... –

+0

確定源文件,它定義了錯過的函數,以及檢查該文件是否在變量MySources中列出。你可以使用'message()'命令輸出變量的值。 – Tsyvarev

回答

1

我不知道這是你的問題的原因,但包括命令應該看起來像這樣:include_directories(${MyHeaders})${MyHeaders}將展開變量MyHeaders並將其當前值傳遞至include_directories。否則,你的字面意思是,包括目錄MyHeaders