Я использую CMake для управления сборкой проекта, но есть некоторые подпроекты, которые нужно создавать с помощью автоинструментов. Я использую функцию ExternalProject в CMake для его сборки, но у меня возникают проблемы при передаче полного набора флагов C / CXX по умолчанию в скрипт конфигурации для подпроекта.
В настоящее время я просто передаю CMAKE_C_FLAGS, CMAKE_CXX_FLAGS и т. Д. Проблема заключается в том, что это не включает в себя специфичные для build_type флаги, что приводит к проблемам при компиляции с отладочной информацией (например), так как мне приходится вручную устанавливать флаг -g .
Текущая внешняя конфигурация проекта выглядит следующим образом:
ExternalProject_Add(
openthread-build
SOURCE_DIR ${openthread_SOURCE_DIR}
BINARY_DIR ${openthread_BINARY_DIR}
CONFIGURE_COMMAND cd ${openthread_SOURCE_DIR}
COMMAND ${openthread_SOURCE_DIR}/configure ${OPENTHREAD_CONFIGURE_OPTS}
"CXX=${CMAKE_CXX_COMPILER}"
"CPP=${CMAKE_C_COMPILER} -E"
"CC=${CMAKE_C_COMPILER}"
"AR=${CMAKE_C_COMPILER_AR}"
"RANLIB=${CMAKE_C_COMPILER_RANLIB}"
"NM=${CMAKE_NM}"
"STRIP=${CMAKE_STRIP}"
"CFLAGS=${CMAKE_C_FLAGS} ${OPENTHREAD_INCLUDE_ARG}"
"CPPFLAGS=${CMAKE_C_FLAGS} ${OPENTHREAD_INCLUDE_ARG}"
"CXXFLAGS=${CMAKE_CXX_FLAGS} ${OPENTHREAD_INCLUDE_ARG}"
"LDFLAGS=${CMAKE_EXE_LINKER_FLAGS}"
"--host=${MACHINE_NAME}"
BUILD_COMMAND ${OPENTHREAD_MAKE} ${OPENTHREAD_MAKE_ARGS}
BUILD_ALWAYS ON
DOWNLOAD_COMMAND cd ${openthread_SOURCE_DIR} && ./bootstrap
INSTALL_COMMAND ""
TEST_COMMAND ""
)
Проблемные строки:
"CFLAGS=${CMAKE_C_FLAGS} ${OPENTHREAD_INCLUDE_ARG}"
В идеале это может быть что-то вроде ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}}
, но это не работает из-за чувствительности к регистру имен переменных.
"CFLAGS=${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}} ${OPENTHREAD_INCLUDE_ARG}"
Так что я думаю, что последний вариант - написать функцию, которая формирует CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}
, преобразует ее в верхнюю и затем расширяет ее, но это кажется довольно неуклюжим.
Существует ли какой-либо простой способ передачи стандартного базового набора флагов C / CXX во внешний проект без необходимости ручного жесткого кодирования для каждого типа сборки или добавления функций? Я ожидаю, что будут включены CMAKE_C_FLAGS по умолчанию и CMAKE_C_FLAGS_ * для типа сборки.