我使用 CMake 来驱动项目的构建,但有一些子项目需要使用自动工具构建。我使用 CMake 中的ExternalProject 功能来构建它,但在将完整的默认 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 ""
)
Run Code Online (Sandbox Code Playgroud)
问题线是这样的:
"CFLAGS=${CMAKE_C_FLAGS} ${OPENTHREAD_INCLUDE_ARG}"
Run Code Online (Sandbox Code Playgroud)
理想情况下可能是类似 的东西${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}},但由于变量名称区分大小写,这不起作用。
"CFLAGS=${CMAKE_C_FLAGS} ${CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE}} ${OPENTHREAD_INCLUDE_ARG}"
Run Code Online (Sandbox Code Playgroud)
所以我想最后的选择是编写一个形成 的函数CMAKE_C_FLAGS_${CMAKE_BUILD_TYPE},将其转换为 upper,然后扩展它,但这看起来相当笨重。
是否有任何简单的方法可以将 C/CXX 标志的默认基本集传递到外部项目,而不需要为每种构建类型进行手动硬编码或添加功能?我希望包含默认的 CMAKE_C_FLAGS 和构建类型的 CMAKE_C_FLAGS_* …
cmake ×1