2015-05-30 14 views
8

Próbuję ustawić wiele definicji kompilacji dla jednego z plików wykonywalnych, które próbuję skompilować w CMake (w celu aktywowania makr używanych do debugowania). Oto, co próbowałem:CMake - jak ustawić wiele definicji kompilacji dla pliku wykonywalnego celu?

add_executable (trie_io_test trie_io_test.c trie.c word_list.c) 
    set_target_properties(
      trie_io_test 
      PROPERTIES 
      COMPILE_DEFINITIONS UNIT_TESTING=1) 
    set_target_properties(
      trie_io_test 
      PROPERTIES 
      COMPILE_DEFINITIONS IO_TEST=1) 

Niestety powoduje to tylko zdefiniowanie IO_TEST.

Próbowałem również następujące:

add_executable (trie_io_test trie_io_test.c trie.c word_list.c) 
    set_target_properties(
      trie_io_test 
      PROPERTIES 
      COMPILE_DEFINITIONS UNIT_TESTING=1 IO_TEST=1) 

Ale, z drugiej strony, powoduje błąd CUpewnij.

Jak ustawić obie te definicje dla pliku wykonywalnego, który próbuję utworzyć?

Odpowiedz

20

Chcesz target_compile_definitions zamiast set_target_properties:

target_compile_definitions(trie_io_test PRIVATE UNIT_TESTING=1 IO_TEST=1) 
+8

I związana docs na moją odpowiedź, ale to jest naprawdę przydatne tylko dla bibliotek zamiast EXE. Libs może zdefiniować swoje flagi kompilacji jako 'PRIVATE',' PUBLIC' lub 'INTERFACE'. "PRIVATE" w zasadzie oznacza, że ​​flagi są stosowane tylko do tej biblioteki. Flagi 'PUBLICZNE' i' INTERFEJS' są również stosowane do dowolnego celu, który łączy się z nim (tj. Jego obiekty zależne); Różnica między tymi dwoma polega na tym, że flagi "INTERFEJS" nie są stosowane do samej biblioteki - tylko jej członkowie. – Fraser

+0

Dzięki, dla odniesienia, jest to odpowiedź na moje pytanie "Co w tym przypadku oznacza PRIVATE?" które usunąłem, ponieważ po zadaniu pytania zobaczyłem link do dokumentacji. – qiubit

+2

PRIVATE dodaje właściwość tylko do tego celu. INTERFACE dodaje właściwość do obiektów docelowych, które prowadzą do tego celu. PUBLIC działa zarówno jako PRIVATE, jak i INTERFACE, ponieważ dodaje właściwość zarówno do tego celu, jak i do celów, które prowadzą do tego celu. – Jay

Powiązane problemy