2017-01-22 7 views
1

У меня есть подкаталог, который создает общую библиотеку, которая создается в папку из моего корневого проекта. Я связываю его в своем файле cmake без каких-либо проблем. Однако компилятор не может найти файлы заголовков независимо от того, как я его перенастроил.CMAKE: Библиотека отсутствует файл заголовка

структура папок аналогична:

Корень

  • сборки
    • Lib
  • ЦСИ
    • библиотека
  • тест
    • library_test

По существу я хочу связать библиотеку, которая компилирует в Lib папку, чтобы связать его испытания. Однако независимо от того, как я настраиваю CMakelists, он не может найти заголовочный файл для библиотеки во время компиляции. Однако во время процесса cmake ошибок нет. Действительное сообщение об ошибке выглядит следующим образом:

fatal error: 'file.h' file not found

Мой пост недавнюю попытку:

find_library(LESSIONS_LIBS chp_two PATHS {CMAKE_SOURCE_DIR}/build/lib/) 
add_library(test_chptwo SHARED ${TEST}) 
target_link_libraries(test_chptwo gtest LESSIONS_LIBS) 

Любые идеи?


Редактировать Один

Вот мои обновленные CMakelists:

Библиотека CMakeLists:

cmake_minimum_required(VERSION 3.7.0) 

#Project Name 
project (chp_two) 

#Build Problem Sets as Library 
#Header Files 
include_directories(include ${CMAKE_CURRENT_SOURCE_DIR}/inc/) 
#Source files 
set(LIB random_queue.cpp ${include}) 
add_library(chp_two SHARED ${LIB}) 

Тестовые CMakeLists:

cmake_minimum_required(VERSION 3.7.0) 

#Project Name 
project(TESTING) 

#Setting Test sources 
set(TEST test_random_queue.cpp) 

#Search for libraries 
find_library(LESSIONS_LIBS chp_two PATHS {CMAKE_SOURCE_DIR}/build/lib/) 

enable_testing() 

#turn test into a library 
add_library(test_chptwo SHARED ${TEST}) 

target_link_libraries(test_chptwo gtest LESSIONS_LIBS) 
+0

Какой ** проект ** вызывает ошибку: один для * библиотеки * или один для * теста *? Добавьте эту информацию в вопрос. – Tsyvarev

+0

Возможный дубликат [CMake include path] (http://stackoverflow.com/questions/15392561/cmake-include-path) – usr1234567

ответ

1

Трудно знать наверняка witho ut ваш файл cmake. Тем не менее, не могли бы вы случайно пропустить вызов include_directories? Этот вызов установит путь к вашим .h файлам для компиляции.

include_directories (path_to_my_headers) 

Ниже приведен пример CMAKE, о котором я говорю в комментариях. Такая же концепция применяется как к libs/exe более или менее в любом случае.

cmake_minimum_required(VERSION 3.7.0) 
# 
project (MyProj) 
# 
include_directories (.) 
include_directories (path_to_a_dir_with_files_I_need) 
include_directories (path_to_another_dir_with_files_I_need) 

# 
file (GLOB HEADERS *.h) 
file (GLOB SOURCES *.cpp) 

# Finish with your CXX flags, add_executable, target_link_libraries, install, etc 
+0

Я сделал это в CMakelist библиотеки. Должен ли я включать заголовок для библиотеки в каждый файл, на который я ссылаюсь? – Aaron

+0

В вашей общей библиотеке есть функции, определенные в заголовке.Связывание с lib недостаточно, так как это помогает только после компиляции. Включите заголовки в вызывающем приложении, чтобы он знал функции из lib, необходимые для вызова. – gsilva2016

+0

Каков наилучший способ справиться с этим с cmake и потенциально большим проектом? – Aaron