Подтвердить что ты не робот

Проект QtCreator CMake - как показать все файлы проекта

Я использую QtCreator для открытия проекта CMake. Некоторые каталоги, кроме CMakeLists.txt, содержат только файлы заголовков *.h, и для этих каталогов QtCreator в дереве проекта отображается только CMakeLists.txt. Как это исправить? Мне нужно увидеть все файлы проекта из QtCreator.

4b9b3361

Ответ 1

Просмотр проекта как файловой системы не является решением, потому что ваши настройки редактора проектов, например, не будут применяться. И я не люблю добавлять заголовки к исполняемой цели, потому что они на самом деле не принадлежат. Вы эффективно калечите файл проекта, чтобы хорошо работать с одной конкретной IDE... не хорошо. Вариантом очистки IMHO будет:

FILE(GLOB_RECURSE LibFiles "include/*.hpp")
add_custom_target(headers SOURCES ${LibFiles})

В качестве бонуса вы получаете свои показания в отдельной папке. (заимствован из https://cmake.org/pipermail/cmake/2012-August/051811.html)

Ответ 2

Я предлагаю вам переключить вид вашего проекта на файловую систему. Это отобразило бы представление, в котором вы могли бы просмотреть любой файл, который вы хотите:

enter image description here

Возможно, вам захочется разделить представление проекта на два, нажав кнопку "вторая справа", если вы все еще желаете режим "Проекты".

Ответ 3

Вы должны добавить файлы заголовков в список исходных файлов: add_executable(${Executable} ${Sources} ${headers})

Вы можете использовать GLOB_RECURSE, если у вас есть много файлов заголовков:

FILE(GLOB_RECURSE INC_ALL "headers/*.h")
include_directories("headers")
add_executable(main "main.cpp" ${INC_ALL})

Не забудьте снова запустить CMake (Build > Run Cmake).

Ответ 4

На основе другого потока, задающего один и тот же вопрос, я нашел общее решение проблемы, работая для всех IDE (по крайней мере, протестированных с помощью QtCreator и Visual Studio).

Можно найти здесь: https://github.com/sauter-hq/cmake-ide-support

# \brief adds for the given target a fake executable targets which allows all
#        headers and symbols to be shown in IDEs.
# \param target_name Which target properties should be added to the IDE support target.
function(target_add_ide_support target_name)
  if (NOT TARGET ${target_name})
    message(FATAL_ERROR "No target defined with name ${target_name}, cannot target_add_ide_support it.")
  endif()

  set (target_for_ide "${target_name}_ide_support")
  if (NOT TARGET ${target_for_ide})
      file(GLOB_RECURSE target_for_ide_srcs "*.h" "*.hpp" "*.hxx" "*.c" "*.cpp" "*.cxx")
      add_executable(${target_for_ide} ${target_for_ide_srcs})
      set_target_properties(${target_for_ide} PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1)
  endif()

  get_target_property(dirs ${target_name} INCLUDE_DIRECTORIES)
  target_include_directories(${target_for_ide} PRIVATE ${dirs})

endfunction(target_add_ide_support)

Использование затем для любых целей в CMakeLists, добавьте следующий вызов (можно сделать в самом верхнем CMakeLists.txt после add_subdirectory:

include(add_ide_support.cmake)
target_add_ide_support(some-target)

Ответ 5

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

Ответ 6

По этому вопросу имеется закрытое сообщение об ошибке: в проекте CMake нет файлов.

В этом конкретном случае проблема была с выбранным генератором, Ninja, который не очень хорошо поддерживается QtCreator.

Пожалуйста, измените это на "CodeBlocks - Ninja". Создателю нужен дополнительный генератор CodeBlocks.

Вы должны увидеть предупреждение об этом при наведении курсора на комплект (а перед названием набора должен быть значок предупреждения).

Использование CodeBlocks - ниндзя решил это и для меня.

В целом, это может помочь попробовать несколько генераторов...