2016-01-23 71 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