LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

Вот такой вариант заработал.

get_property(DIR_DEFS DIRECTORY "${CMAKE_SOURCE_DIR}" PROPERTY COMPILE_DEFINITIONS)
separate_arguments(DIR_DEFS)
get_property(TARGET_DEFS TARGET MyProgram PROPERTY COMPILE_DEFINITIONS)
separate_arguments(TARGET_DEFS)
foreach(FLAG ${DIR_DEFS} ${TARGET_DEFS})
	list(APPEND CUR_CONFIG_BUILD_FLAGS --cpp-arg=-D${FLAG})
endforeach()

foreach(BUILD_TYPE ${CMAKE_BUILD_TYPE} ${CMAKE_CONFIGURATION_TYPES})
	string(TOUPPER "${BUILD_TYPE}" BUILD_TYPE)
	set(TMP ${CMAKE_C_FLAGS_${BUILD_TYPE}})
	separate_arguments(TMP)
	foreach(FLAG ${TMP})
		list(APPEND CUR_CONFIG_BUILD_FLAGS $<$<CONFIG:${BUILD_TYPE}>:--cpp-arg=${FLAG}>)
	endforeach()
endforeach()

add_custom_command(
		OUTPUT ...
		COMMAND "${Python3_EXECUTABLE}" "..."
		--cpp-path="${CMAKE_C_COMPILER}"
		--cpp-arg=-E
		${CUR_CONFIG_BUILD_FLAGS}
		...
)

Только удручает его громздкость. Интересно, можно ли его как-то оптимизировать или это неизбежность с CMake.

Исходная версия KivApple, :

Вот такой вариант заработал.

get_property(DIR_DEFS DIRECTORY "${CMAKE_SOURCE_DIR}" PROPERTY COMPILE_DEFINITIONS)
separate_arguments(DIR_DEFS)
get_property(TARGET_DEFS TARGET "${CMAKE_PROJECT_NAME}" PROPERTY COMPILE_DEFINITIONS)
separate_arguments(TARGET_DEFS)
foreach(FLAG ${DIR_DEFS} ${TARGET_DEFS})
	list(APPEND CUR_CONFIG_BUILD_FLAGS --cpp-arg=-D${FLAG})
endforeach()

foreach(BUILD_TYPE ${CMAKE_BUILD_TYPE} ${CMAKE_CONFIGURATION_TYPES})
	string(TOUPPER "${BUILD_TYPE}" BUILD_TYPE)
	set(TMP ${CMAKE_C_FLAGS_${BUILD_TYPE}})
	separate_arguments(TMP)
	foreach(FLAG ${TMP})
		list(APPEND CUR_CONFIG_BUILD_FLAGS $<$<CONFIG:${BUILD_TYPE}>:--cpp-arg=${FLAG}>)
	endforeach()
endforeach()

add_custom_command(
		OUTPUT ...
		COMMAND "${Python3_EXECUTABLE}" "..."
		--cpp-path="${CMAKE_C_COMPILER}"
		--cpp-arg=-E
		${CUR_CONFIG_BUILD_FLAGS}
		...
)

Только удручает его громздкость. Интересно, можно ли его как-то оптимизировать или это неизбежность с CMake.