2016-11-29 3 views
0

Есть ли способ избавиться от папок CMake Rules в целевых объектах в Visual Studio?Избавьтесь от папки правил CMake

solution explorer

В этом случае game цели использует cotire для поддержки скомпилированных заголовков и omg цели имеет пользовательскую команду, которая анализирует файл .mix и выводит файл ..._gen.h.

Также можно было бы удалить файл CMakeLists.txt оттуда тоже? Я знаю, что это доступно для удобства, но в моем рабочем процессе это не так полезно.

EDIT: Начал вторую награду, потому что мне это действительно нужно - эти папки «CMake Rules» раздувают мой исследователь решений, потому что у меня есть 100 проектов, которые у всех есть!

Я бы принять что-либо - путь CMake, путь VS (некоторые "решение Проводник" или макро или любой другой) ...

EDIT 2:

здесь сортировки из CMake для omg цели:

add_library(omg SHARED D:/omg.cpp D:/omg.mix) 
add_custom_command(OUTPUT D:/omg_gen.h MAIN_DEPENDENCY D:/omg.mix COMMAND python D:/mixify.py D:/omg.mix D:/omg_gen.h) 
add_custom_target(${target}_gen_${mix_name_only} DEPENDS ${gen_header}) 
add_dependencies(omg omg_gen) 
target_sources(omg PUBLIC D:/omg_gen.h) 

так omg_gen.h генерируются из omg.mix и затем включен в omg.cpp

+0

CMakeLists.txt необходим CMake, файл содержит все, что будет делать CMake. Желая, чтобы они были удалены, это похоже на то, что вы можете избавиться от всех исходных файлов на C++. – usr1234567

+0

@ usr1234567 ok - не удаляется CMakeLists.txt. Но как насчет папки '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – onqtam

+0

@ usr1234567 Я использую сборки вне источника. Проблема в том, что в моих целях есть специальные команды, и поэтому эти папки CMake_Rules появляются в проводнике решений. И у меня есть сотни таких целей (проекты в решении), и мой обозреватель решений раздувается с вещами, которые я не хочу видеть. – onqtam

ответ

2

Файлы .rule необходимы CMake для присоединения пользовательских команд к некоторому «фиктивному» самогенерированному файлу, если нет входных файлов. Это можно увидеть, если посмотреть на свойства файла .rule вашего проекта Visual Studio (см. Custom Build Tool/General/Command Line).

Если вы не меняете код сценария CMake, содержащий эту цель, вы не можете избавиться от них.

Вы можете перемещать их только в исходную папку проекта или любую другую указанную вами папку.

Я успешно протестировали следующий пример:

cmake_minimum_required(VERSION 2.8) 
project(NoRulesSourceGroup NONE) 

# Overwrite the rule for "CMake Rules" with do-not-match-anything (-> root) 
source_group("CMake Rules" REGULAR_EXPRESSION "^$") 

# Move ".rule" files somewhere else 
source_group("Some Other Source Group" REGULAR_EXPRESSION "\\.rule$") 

add_custom_target(
    ${PROJECT_NAME} 
    COMMAND ${CMAKE_COMMAND} -E echo "Hello World" 
) 

Edit: Вы можете также объединить выше регулярное выражение в матче за CMakeLists.txt:

source_group("Some Other Source Group" REGULAR_EXPRESSION "CMakeLists\\.txt|\\.rule$") 

Редактировать: Если вы можете изменить код сценария CMake, вам необходимо добавить к вашему add_custom_command() вызова:

MAIN_DEPENDENCY 

Укажите источник входного файла основной для команды. Это рассматривается как любое значение, заданное параметру DEPENDS, но также предлагает генераторам Visual Studio, где можно повесить пользовательскую команду. Не более одной пользовательской команды может указывать данный исходный файл в качестве основной зависимости.

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

file(WRITE omg.cpp "") 
file(WRITE omg.mix "") 

add_library(omg SHARED omg.cpp omg.mix) 
add_custom_command(
    OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/omg_gen.h 
    MAIN_DEPENDENCY omg.mix 
    COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/omg.mix ${CMAKE_CURRENT_BINARY_DIR}/omg_gen.h 
) 
target_sources(omg PUBLIC ${CMAKE_CURRENT_BINARY_DIR}/omg_gen.h) 

Ссылки

+0

Спасибо за объяснение. Я попытался поместить оба файла '' '.rule''' и' '' CMakeLists.txt'' в ту же папку '' '' Some Other Source Group ''' ', но не сделал работа - в нее вошли только правила. Когда я попытался поместить файлы '' '.rule''' и' '' CMakeLists.txt''' в отдельные папки, он сработал. Anyway ... Что мне делать, чтобы добавить ввод в мои пользовательские команды, чтобы не начиналось с '' '.rule''' файлов? Я уже использовал '' 'OUTPUT''' /' '' DEPENDS''' '' 'COMMAND'''' '' 'COMMENT''' - возможно, мне нужно использовать' '' MAIN_DEPENDENCY'''? – onqtam

+0

OMG! Использование '' 'MAIN_DEPENDENCY''' в отличие от' '' DEPENDS'' удалило '' '.rule''' файлы! OMG спасибо! Таким образом, невозможно скрыть или удалить файлы '' 'CMakeLists.txt''' ... Вы получаете щедрость. Но так же, как побочный вопрос - знаете ли вы способ скрыть «' Литература'', что VS ставит в каждый проект? Это не CMake специфический ... – onqtam

+0

@onqtam Добро пожаловать. Если вы можете добавить пример кода CMake, содержащий, например, цель «omg», я мог бы добавить предложение с моей стороны. И да, я имел в виду «MAIN_DEPENDENCY», чтобы объявить входной файл, где CMake может добавить 'COMMAND' для. И не могли бы вы добавить то, что вы пытались поместить 'CMakeLists.txt' в исходную группу? Вы пытались использовать абсолютные пути или регулярное выражение в соответствующем вызове 'source_group()'? – Florian

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