2016-01-23 2 views
1

Я пытаюсь загрузить и построить исходные файлы Stanford Library и построить из них библиотеку для использования в моем собственном проекте с использованием CLI (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). Поскольку ваш проект содержит только библиотеку, вам не нужно указывать что-либо в поле «Исполняемое». Как обычно, неопределенные ссылки означают, что ни один из ваших источников, встроенных в библиотеку, не содержит определения этой функции. (Вместо '/ stacktrace /' в 'файле (GLOB)' должно быть 'stacktrace /'). – Tsyvarev

+0

О, вы правы насчет исполняемого файла, что до сих пор неясно, почему я получаю неопределенные ссылки, на самом деле IDE (автозаполнение) видит эти ссылки ... –

+0

Определить исходный файл, который определяет пропущенные функции, и проверьте, что этот файл указан в переменной 'MySources'. Вы можете вывести значение переменной с помощью команды 'message()'. – Tsyvarev

ответ

1

Я не знаю, является ли это причиной вашей проблемы, но включить команду должно выглядеть следующим образом: include_directories(${MyHeaders}). ${MyHeaders} расширит переменную MyHeaders и передаст ее текущее значение в include_directories. В противном случае вы, буквально, включая каталог MyHeaders.