2015-02-07 18 views

Odpowiedz

22

Wyświetlanie projektu jako systemu plików nie jest rozwiązaniem w ogóle, ponieważ ustawienia edytora projektu na przykład nie będą miały zastosowania. I nie lubię dodawać nagłówków do wykonywalnych celów, ponieważ w rzeczywistości ich tam nie ma. Skutecznie okaleczyłeś plik projektu, aby dobrze działał z jednym konkretnym IDE ... nie jest dobry. Odkurzacz opcja IMHO byłoby:

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

Jako bonus dostaniesz swój obejmuje przedstawiono w osobnym folderze. (zapożyczono z https://cmake.org/pipermail/cmake/2012-August/051811.html)

8

Proponuję zmienić widok projektu na System plików. To wyświetli widok, w którym można oglądać dowolny plik:

enter image description here

może chcesz się podzielić na dwie części widoku projektu klikając drugi do prawego przycisku, jeśli nadal pragną tryb projektów.

+0

Ok, ale które oświadczenie w plikach CMake powoduje, że pliki są widoczne w widoku drzewa projektu? – Irbis

+0

Nie jestem pewien.Ale są deklaracje w CMake określanie kodu źródłowego prawdopodobnie dodać ograniczenie do tego, co wyświetla widok drzewa projektu. trochę budynku funkcja t-in samego QtCreatora, wątpię. –

+4

Niestety widok pliku jest płaski, a zatem nie jest wystarczającym zamiennikiem widoku projektu. – Zulan

7

Należy dodać pliki nagłówkowe do listy plików źródłowych: add_executable(${Executable} ${Sources} ${headers})

Można wykorzystać GLOB_RECURSE jeśli masz wiele plików nagłówka:

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

Nie zapomnij ponownie uruchomić CMake (Build> Uruchom Cmake).

+2

[CMake oficjalnie nie poleca] (https://cmake.org/cmake/help/latest/command/file.html) globalizacji źródeł, ponieważ CMake wtedy nie będzie w stanie wykryć kiedy musi się zregenerować na podstawie dodanych, usuniętych lub zmienionych nazw plików. –

1

Możesz spróbować CMakeProjectManager2. Kod wyświetlający wszystkie pliki, które są już propagowane do źródła jako dowód koncepcji. Koncept zastosowany, ale kod nie może być zastosowany tak jak jest z kilku powodów. Tak, prosta funkcja oczekiwania w górnym biegu.

1

Na podstawie innego wątku zadającego to samo pytanie, znalazłem ogólne rozwiązanie problemu, działające dla wszystkich IDE (przynajmniej testowane z QtCreator i Visual Studio).

można znaleźć tutaj: 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) 

Wykorzystanie jest to dla niej cele w CMakeLists, dodać następujące połączenia (może być wykonane w najwyższym, CMakeLists.txt przecież add_subdirectory:

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

Miałem problem z zaakceptowanym rozwiązaniem, nie mogąc wyszukać niektórych zewnętrznych nagłówków (z biblioteki PCL Pointcloud) w plikach nagłówkowych mojego projektu. Zastosowanie tego podejścia rozwiązało problem. – mikkola

Powiązane problemy