2015-06-08 6 views
5

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 ...

Odpowiedz

2

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ą:

    powinien on nie
  • Ogólnie zawierać wyrażenie generator
  • w systemie Windows wszystkiego co nie rozpoczyna się \ lub / i drugą postać jest nie:
  • Na Unix wszystko, nie rozpoczyna się / 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:

5

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.