powinienem używać
INCLUDE_DIRECTORIES(
.
)
lub
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
)
Jaka jest różnica, jeśli w ogóle? Widziałem głównie "." w istniejącym kodzie, ale szukanie kropki w Internecie jest trudne ...
powinienem używać
INCLUDE_DIRECTORIES(
.
)
lub
INCLUDE_DIRECTORIES(
${CMAKE_CURRENT_SOURCE_DIR}
)
Jaka jest różnica, jeśli w ogóle? Widziałem głównie "." w istniejącym kodzie, ale szukanie kropki w Internecie jest trudne ...
W twoim przypadku możesz pomyśleć o globalnym ustawieniu CMAKE_INCLUDE_CURRENT_DIR na ON
.
Jeśli chodzi o twoje pytanie, odpowiedź zależy głównie od twoich preferencji. Wolę wariant ścieżki względnej dla czytelności plików CMakeLists.txt
.
Jeśli spojrzeć na kod źródłowy CUpewnij pod adresem cmTargetIncludeDirectoriesCommand ::Join() i SystemTools::FileIsFullPath() znaleźć następujące warunki sprawdzonych przez CMake - po rozwinięciu zmienne - czy to będzie dołączyć CMAKE_CURRENT_SOURCE_DIR
do ścieżek obejmują:
\
lub /
i drugą postać jest nie:
/
lub ~
W konsekwencji następujący kod CUpewnij
include_directories(.)
get_directory_property(_inc_dirs INCLUDE_DIRECTORIES)
message("_inc_dirs: ${_inc_dirs}")
pokaże
_inc_dirs: [...your CMakeLists.txt path ...]/.
Ten automatyczny i ścieżka absolutna pr zachowanie efixinga CMake ma sens, ponieważ jest możliwe - i często zalecane - wykonywanie kompilacji drzewa poza źródłem w CMake (zobacz także CMake policy CMP0021).
Można pomyśleć o ustawieniu CMAKE_USE_RELATIVE_PATHS do ON
który przekonwertuje zawierać ścieżki z powrotem podczas generowania środowiska kompilacji dla ścieżek względnych do katalogu CMAKE_BINARY_DIR
(ale działa tylko z generatorów Makefile).
Niektóre dodatkowe referencje:
Oba zastosowania generują prawie taki sam wynik, ponieważ CMake śledzi bieżący katalog i zastępuje wystąpienie ".„Z«$ {CMAKE_CURRENT_SOURCE_DIR} /.». Jedyną różnicą jest to, że”.”Wariant ma dodatkowy składnik ścieżki«/.»Dołączany.
Cokolwiek wybierzesz to kwestia gustu tutaj.