Я пытаюсь установить несколько определений компиляции для одного из исполняемых файлов, которые я пытаюсь скомпилировать в CMake (чтобы активировать макросы, используемые для отладки). Вот что я пробовал:CMake - как установить несколько определений компиляции для исполняемого файла цели?
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)
К сожалению, это приводит к определению только IO_TEST.
Я также попытался следующие:
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)
Но, с другой стороны, вызывает ошибку CMake.
Как установить оба этих определения для исполняемого файла, который я пытаюсь создать?
Я связан с Docs в моем ответе, но это действительно полезно только для библиотек, а не бывшими. Libs может определять свои флагов компиляции как «ЧАСТНЫЕ», «PUBLIC» или «INTERFACE». 'PRIVATE' в основном означает, что флаги применяются только к этой библиотеке. Флаги «PUBLIC» и «INTERFACE» также применяются к любой цели, которая привязана к ней (т. Е. Ее зависимым); разница между этими двумя заключается в том, что флаги 'INTERFACE' не применяются к самой библиотеке - только ее зависимым. – Fraser
Спасибо, для справки, это ответ на мой вопрос «Что означает PRIVATE в данном случае?» который я удалил, потому что увидел, что после запроса вопроса появилась ссылка на документацию. – qiubit
PRIVATE добавляет свойство именно этой цели. INTERFACE добавляет свойство к объектам, которые ссылаются на эту цель. PUBLIC действует как PRIVATE и INTERFACE, потому что он добавляет свойство как к этой цели, так и к целевым объектам, которые ссылаются на эту цель. – Jay