LINUX.ORG.RU

Не отображаются .h файлы в Qt Creator

 , ,


1

3

Что за ерунда? Имеется проект с Cmake на борту. я его открываю в Qt Creator(версия 3.5 с чем-то по моему). Открываю с помощью открытия файла CMakeLists.txt в корне проекта.

Всё хорошо, всё компилится и работает. Но вот в Qt никак не отображаются файлы .h

Как мне сделать так, чтобы в дереве проекта они отображались?

ЧЯДНТ? Гугль не помог(даже не подозреваю, куда гуглить надо)

Ответ на: комментарий от gavlig

да, есть. иначе бы не компилилось, и юзаю include_directories()

zamazan4ik ★★
() автор топика

Хедеры нужно добавлять в цели компиляции. Типа такого:

set(SRCS a.cpp b.cpp c.cpp)
set(HDRS a.h b.h c.h)
add_executable(app ${SRCS} ${HDRS})
oh-la-la
()
Ответ на: комментарий от oh-la-la

правильно я понимаю?

1) ДОписываем по Вашему экзамплу в проект.

2) Прогоняем cmake по-новой

3) Хедеры появляются в дереве проекта. Всё верно?

zamazan4ik ★★
() автор топика
Ответ на: комментарий от zamazan4ik

попробуй что oh-la-la предложил на одном хедере и расскажешь, чем закончится :)

gavlig ★★★
()
Ответ на: комментарий от zamazan4ik

если по-быстрому, то include_directories(-I) + #include «header.h» позволяют компилятору собирать проект, но иде ж не знает, какие ты хедеры юзнул из той директории

gavlig ★★★
()
Ответ на: комментарий от oh-la-la

Спасибо большое! Это работает! Теперь внимание другой вопрос : можно ли так подключить все хедеры из этой папки(включая хедеры из вложенных папок) ? Просто руками всё это очень долго будет писать : там много хедеров

zamazan4ik ★★
() автор топика

Qtc, в отличии от того же CLion, ничего ни за кого не выдумывает.

Поэтому показывает только те файлы, которые добавленны как сорцы к цели. Если ты хочешь показывать хидеры - либо добавь их к соответсвующей цели, как исходники, либо сделай фейковую цель, и добавь их к ней.

pon4ik ★★★★★
()
Ответ на: комментарий от pon4ik

нет, Вы меня с кем-то путаете. За ссылку спасибо большое

zamazan4ik ★★
() автор топика
Ответ на: комментарий от pon4ik

Проблема решена посредством применения File(GLOB ..) и add_executable.

Буду дальше знакомиться с cmake.

Если кто предложит более хорошее решение - буду рад его узнать.

Решено!

zamazan4ik ★★
() автор топика
Ответ на: комментарий от zamazan4ik

Проблема решена посредством применения File(GLOB ..) и add_executable.
Буду дальше знакомиться с cmake.
Если кто предложит более хорошее решение - буду рад его узнать.
Решено!

Тут проблема не в CMake, а в том, что QtCreator не считает заголовочные файлы, отсутствующие в CmakeLists.txt частью проекта. Существует альтернативная реализация менеджера проектов CMake для QtCreator, возможно там поведение другое.

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 1)
Ответ на: комментарий от m0rph

CMake это кроссплатформа, поэтому, в той же студии - проблема повториться. А также в Code::Blocks, KDevelop(если они всё не испортили), Eclipse, и любой другой фигне, где кто то не насмотрелся на Jb и не накостылил.

Qtc в данном случае прав. Ибо фактически, нигде нет инфо об инклудах, их можно конечно, показыать наугад, все подряд, но качественно показывать только то, что используется в текущей конфиграции не выйдет, без дополнительного анализа кодовой базы, что в принципе разные задачи с управлением проектом и сборкой.

pon4ik ★★★★★
()
Ответ на: комментарий от zamazan4ik

Проблема решена посредством применения File(GLOB ..) и add_executable

Дурацкое решение. Захочешь добавить новый файл - надо перезапускать cmake, и это не единственный минус.

Сам я вместо добавления файлов в add_executable добавлял фейковую цель, которая не собирается.

jeuta ★★★★
()
Ответ на: комментарий от zamazan4ik
add_executable(dummy EXCLUDE_FROM_ALL ${HDRS})
target_link_libraries(dummy <все твои либы>)

Так приходилось делать в новом (3.5.0) QtCreator'е, иначе если я добавлял просто add_custom_target(...), то в добавленных заголовочниках не находились Qt заголовочники (#include <QtList>, например, не импортировало определения для подсветки кода и рефакторинга)

jeuta ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.