Я использую QtCreator для открытия проекта CMake. Некоторые каталоги, кроме CMakeLists.txt, содержат только файлы заголовков *.h, и для этих каталогов QtCreator в дереве проекта отображается только CMakeLists.txt. Как это исправить? Мне нужно увидеть все файлы проекта из QtCreator.
Проект QtCreator CMake - как показать все файлы проекта
Ответ 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
Я предлагаю вам переключить вид вашего проекта на файловую систему. Это отобразило бы представление, в котором вы могли бы просмотреть любой файл, который вы хотите:
Возможно, вам захочется разделить представление проекта на два, нажав кнопку "вторая справа", если вы все еще желаете режим "Проекты".
Ответ 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 - ниндзя решил это и для меня.
В целом, это может помочь попробовать несколько генераторов...