2013-03-05 13 views
27

W dokumentacji CMake, możemy przeczytać:CUpewnij: kiedy używać add_definitions zamiast set_target_properties (Definicje docelowych właściwości COMPILE_DEFINITIONS)

add_definitions

Dodaje flagi linii poleceń kompilatora dla źródeł w bieżący katalog i poniżej.

COMPILE_DEFINITIONS property on directories

COMPILE_DEFINITIONS: definicje preprocesora do kompilacji źródeł katalogu użytkownika.

COMPILE_DEFINITIONS property on targets

COMPILE_DEFINITIONS: definicje preprocesora do kompilacji źródeł celowi.

COMPILE_DEFINITIONS property on source files

COMPILE_DEFINITIONS: definicje preprocesora do kompilacji pliku źródłowego.

COMPILE_DEFINITIONS i add_definitions funkcjonalność wydaje się zachodzić na siebie. COMPILE_DEFINITIONS właściwość wydaje się bardziej elastyczna.

Wygląda na to, że właściwość COMPILE_DEFINITIONS robi wszystko co add_definitions, a nawet więcej.

Tak więc, w jakich przypadkach musi my add_definitions zadzwonić ponieważ nieruchomość COMPILE_DEFINITIONS nie może być używany?

Odpowiedz

34

add_definitions istniał w CMake od pierwszej wersji CMake pojawił się online ponad dziesięć lat temu.

COMPILE_DEFINITIONS to po prostu nowszy, bardziej elastyczny i drobnoziarnisty sposób na zrobienie tego.

Zawsze będą oboje: ponieważ 99% + istniejących plików CMakeLists na świecie używa add_definitions, po prostu nie byłoby rozsądnie je usunąć. Twórcy CMake pracują bardzo ciężko, aby zachować kompatybilność wsteczną ... czasami ze szkodą dla przejrzystości i prostoty. A czasami robi zasadniczo to samo na wiele różnych sposobów.

A więc: add_definitions jest przede wszystkim przydatny do konfigurowania wcześniej istniejących plików CMakeLists - w przypadku projektów, które istniały od czasów przed wprowadzeniem COMPILE_DEFINITIONS. A ponieważ te projekty go używają, wszelkie nowsze projekty oparte na tym, czego ludzie uczą się od odczytania tych plików CMakeList, mogą również używać add_definitions.

Ale jeśli samo korzystanie z COMPILE_DEFINITIONS jest wystarczające, z pewnością nie ma w tym nic złego.

+7

Czy możesz wyjaśnić, w jaki sposób można to poznać? Czy jest to gdzieś w dokumentacji? Co trzeba przeczytać, aby zrozumieć tajemnice CMake'a? – Praxeolitic

3

Nie mówię, że trzeba użyć czegoś, co musi.

To tylko kwestia Twojego przyzwyczajenia.

Niektóre zalecenia:

  • Zastosowanie add_definitions, gdy chcemy dodać do kompilatora wiersza polecenia dla źródeł w bieżącym katalogu i poniżej. Jest krótszy niż typ .

  • Użyj COMPILE_DEFINITIONS do precyzyjnego dostrojenia docelowych lub określonych źródeł .

+1

Dzięki. Moje pytanie było bardziej zrozumiałe, w których przypadkach przydatne jest add_definitions. Ponieważ wydaje się, że właściwość COMPILE_DEFINITIONS robi to samo, a nawet więcej. – Korchkidu

+0

Podałem ci jeden powód - chcesz uprościć - użyj add_definition. Chcesz pełnej kontroli - użyj set_properties z COMPILE_DEFINITION. –

Powiązane problemy