Notacja #include z czydzysłowami oraz nawiasami trójkątnymi

0

Trzymam sie takiej zasady:
#include "" dla wszystkich plików w obrębie add_library/add_executable z cmake (w zakresie biblioteki/aplikacji)

#include <> w pozostałych przypadkach

Wszytko co nie jest z bieżącego targetu cmake musi być w <> bo jest częścią systemu w ktorym budujemy, a to czy to jest systemowa biblioteka czy biblioteka w projekcie cmake to juz nie istotne

bliblioteka A

add_library(A    a1.h a1.cpp  a2.h a2.cpp)
target_include_directory(A PUBLIC ./)
// a2.cpp
#include "a1.h"  // plik  z aktualnego targetu wiec "" 

bliblioteka B(zależna od A)

add_library(B    b1.h b1.cpp  b2.h b2.cpp)
target_link_library(B PRIVATE A)
// b2.cpp
#include "b1.h"  // plik  z aktualnego targetu wiec ""
#include <a1.h>  // plik  NIE z aktualnego targetu wiec <>

czy ten tok rozumowania jest poprawny ?

po co jest rozroznienie na "" i <>
? czy to tez wywodzi sie z prehistorii c++ ?

5
Marius.Maximus napisał(a):

po co jest rozroznienie na "" i <>

#include "" różni się od <> tym, że w pierwszej kolejności sprawdza czy dany nagłówek znajduje się w tej samej relatywnej lokalizacji na dysku co plik do którego jest dołączany, potem w kolejnym kroku sprawdza ustawione ścieżki do szukania przekazane kompilatorowi. Czyli jak robisz #include "scene_details/rotation.hpp" to ścieżka scene_details nie musi być częścią ścieżek dodanych jawnie do wyszukiwania przez kompilator, żeby taki include zadziałał, pod warunkiem, że scene_detail/rotation.hpp jest relatywną ścieżką względem pliku do którego dodałeś taki include.

Można w ten sposób ukryć nieco nagłówki modułów wewnąrz systemu, które zostały stworzone w wyspecjalizowanym celu i nie były przeznaczone do użycia dla reszty systemu. Czy to ma sens i czy właśnie po to było to rózróżnienie to nie wiem, zależy od systemu.

1 użytkowników online, w tym zalogowanych: 0, gości: 1