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ć?
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
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
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