Добавление флагов компилятора "#define" в подкаталог CMakeLists.txt - PullRequest
0 голосов
/ 14 декабря 2018

Моя структура каталогов проекта построена с несколькими CMakeLists.txts.

  • root

    • CMakeLists.txt
    • Src
      • main.c
    • CMSIS_lib
      • вычисления.c
      • Подсчет.h
      • CMakeLists.txt
    • cmake

      • toolchain.cmake
    • build

В моем CMSIS_lib я создаю отдельно мои исходные файлы зависимостей calculate.c и calculate.h с CMSIS_lib / CMakeList.txt :

set(util_source_files
  calculate.c
  calculate.h
)
add_library(util ${util_source_files})
target_include_directories(util calculate.h)

В моемroot CMakeLists.txt :

cmake_minimum_required(VERSION 3.4)
project(main_projct)
set(TOOLCHAIN_PREFIX /opt/gcc-arm-none-eabi)
set(CMAKE_TOOLCHAIN_FILE cmake/toolchain.cmake)

add_subdirectory(CMSIS_lib)

add_executable(main_projct main.c)
target_link_libraries(main_projct util)

Проблема заключается в том, что я должен сказать своему компилятору добавить #define GUCCI в мой calculate.h (В MakeFile я знаю, что есть флаг, чтобы сообщитьзаголовок определить с помощью -DGUCCI).Я хотел бы добавить этот флаг в мой компилятор в моем CMSIS_lib / CMakeList.txt , потому что, когда первый CMSIS_lib / CMakeList.txt будет завершен, он пропустит все в #ifndef GUCCI в моем calculate.h, и при добавлении в корневой CMakeLists.txt с target_link_libraries() у меня не будет все правильно определяет конфигурацию.

Я использую кросс-компилятор и в моем toolchain.cmake я использую для определения флагов компилятора с помощью команды SET_TARGET_PROPERTIES(${TARGET} PROPERTIES COMPILE_DEFINITIONS GUCCI}"), но это слишком поздно, потому что это видит только мой корневой CMakeLists.txt, а не мой поддиректор CMakeLists.txt.

1 Ответ

0 голосов
/ 14 декабря 2018

Ваша CMSIS_lib / CMakeList.txt должна выглядеть следующим образом:

set(util_source_files
    calculate.c
    calculate.h
)

add_library(util ${util_source_files})
target_include_directories(util ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_defintions(util PUBLIC GUCCI)

note target_compile_definitions строка с параметром PUBLIC: она инструктирует cmake использовать -DGUCCI опция компилятора при компиляции util и всех целей, которые связаны с util.

Также обратите внимание на изменение в target_include_directories.Вы поместили заголовочный файл в качестве параметра, но вы должны вместо этого поместить каталог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...