2015-05-19 2 views
0

У меня есть еще одна проблема с моим проектом. Мне удалось получить cmake, чтобы скомпилировать его, но make не пройдет. Я получаю сообщение об ошибке, что некоторые заголовки не найдены, поэтому я проверил мои include_directories в соответствии с этим ответом на вопросы: Listing include_directories in CMakeCMake игнорирует включенные каталоги

Мои каталоги include_directories имеют все указанные папки, перечисленные как я хочу, но makefile не включает в себя "INC" tag, а cmake-gui не отображает свойство include_directories. Кто-нибудь сталкивался с подобной или аналогичной проблемой, может мне помочь?

Edit:

верхнего уровня CMake:

PROJECT(MyProject) 
CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0) 
# set the compiler flags 
SET(CMAKE_CXX_COMPILER g++) 
SET(CMAKE_CXX_FLAGS "-fPIC -g -D DEBUG -Wall -Wfatal-errors -fstrict-aliasing") 

INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIR} 
        ${GLEW_INCLUDE_DIR} 
        ${GLUT_INCLUDE_DIR} 
        ${GSL_INCLUDE_DIRS}     
        ${OpenCV_INCLUDE_DIRS} 
        ${QT_INCLUDE_DIR}   
        ${MyProject_SOURCE_DIR}/include) 

и после этого у меня есть некоторые add_subdirectories. CMake запускается без ошибок, но make, похоже, игнорирует последнюю строку include_directories.

+1

Что такое " INC "? –

+0

Я googled, как каталоги include указаны в make-файле - я предположил, что это должно быть распространено из cmake в make-файл (поскольку он должен знать, где искать заголовок и источники) – sqred

+0

Можете ли вы предоставить CMakeLists.txt? Возможно, что-то простое, как include_directories(), нужно вызывать перед add_library и add_executable. – Finn

ответ

1

Вот краткий перечень:

  • Убедитесь, что пути к каталогам нет пробельные, это не может повлиять на CMake напрямую, но это может вызвать проблемы с другими инструментами (GCC, MinGW-марка/замыкающие)
  • Make убедитесь, что у вас есть правильная команда Make (попробуйте запустить make в каталоге, в котором вы звоните cmake). В противном случае вы можете просто добавить путь к Make in environment, чтобы убедиться, что cmake его видит.
  • путей каталогов печати, чтобы убедиться, что они правильно и проверьте, чтобы увидеть, если у них есть пробельные

    MESSAGE("${Boost_INCLUDE_DIR}")

    MESSAGE("${GLEW_INCLUDE_DIR}")

    ...

  • Вы действительно должны добавить заголовки к исполняемым (не необходимо, но если вы создадите файлы проекта IDE, вы увидите там заголовки)

  • Для каждой используемой внешней библиотеки попытайтесь скомпилировать простой мир приветствия, чтобы определить, правильно ли установлена ​​эта библиотека (сделать простой проект, используя простые функции, чтобы увидеть, компилирует ли он, ссылается и запускается)
  • Убедитесь, что путь каталогов включен правильно #include <something.h> или #include "something.h" или #include <path/something.h> (или изменить путь включения, установленный CMake неправильным способом)
  • Вы установили эти внешние библиотеки, не так ли? (CMake не смог найти их, если вы просто «распаковали» их куда-нибудь)

Способ упаковки CMake, как полагают, это единственное, что я ненавижу CMake. (Я вручную настроил проект CMake для каждой внешней библиотеки, а затем связал его вручную из моих проектов вместо использования «Глобальные переменные»). В большинстве случаев он полагается на какой-то процесс установки этих библиотек, но он может быть изменен или ошибочен во многих отношениях, о которых вы не можете предсказать, а если вы загрузите конкретную ревизию внешней библиотеки, создайте ее самостоятельно и установите путь вручную, вы уверены, что если что-то пойдет не так, это ошибка сопровождающих библиотек, а не ваших или некоторых отсутствующих сведений об установке (если это не так, значит, вы больше не работаете в операционной системе: D)

+1

Прежде всего, спасибо за ваш вклад. Я проверил мои включенные каталоги с cmake-gui, а message() дал мне правильные пути. make говорит, что include из $ {MyProject_SOURCE_DIR}/include не найден, хотя его в include-каталогах. – sqred

+0

На этом этапе вы должны воспроизвести проблему, чтобы дать возможность провести дальнейшее расследование – GameDeveloper

+0

@sqred, любое обновление? У меня такая же проблема :) – Alex

Смежные вопросы