#c #makefile #cmake #cmakelists-options
Вопрос:
Я пытаюсь преобразовать файл макета micropython в cmakelists.txt от https://docs.micropython.org/en/latest/develop/porting.html
# Include the core environment definitions; this will set $(TOP).
include ../../py/mkenv.mk
# Include py core make definitions.
include $(TOP)/py/py.mk
# Set CFLAGS and libraries.
CFLAGS = -I. -I$(BUILD) -I$(TOP)
LIBS = -lm
CROSS_COMPILE ?= arm-none-eabi-
# Define the required source files.
SRC_C =
main.c
mphalport.c
lib/mp-readline/readline.c
lib/utils/gchelper_generic.c
lib/utils/pyexec.c
lib/utils/stdout_helpers.c
# Define the required object files.
OBJ = $(PY_CORE_O) $(addprefix $(BUILD)/, $(SRC_C:.c=.o))
# Define the top-level target, the main firmware.
all: $(BUILD)/firmware.elf
# Define how to build the firmware.
$(BUILD)/firmware.elf: $(OBJ)
$(ECHO) "LINK $@"
$(Q)$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
$(Q)$(SIZE) $@
# Include remaining core make rules.
include $(TOP)/py/mkrules.mk
Текущий прогресс в cmakelists.txt
cmake_minimum_required(VERSION 3.17)
set(CMAKE_CXX_STANDARD 14)
set(MICROPY_TARGET firmware)
set(MICROPY_DIR "../..")
set(MICROPY_PORT_DIR ${CMAKE_CURRENT_SOURCE_DIR})
include(${MICROPY_DIR}/py/py.cmake)
project(${MICROPY_TARGET})
set(MICROPY_SOURCE_PORT
${MICROPY_PORT_DIR}/main.c
${MICROPY_PORT_DIR}/mphalport.c
${MICROPY_DIR}/lib/mp-readline/readline.c
${MICROPY_DIR}/lib/utils/gchelper_generic.c
${MICROPY_DIR}/lib/utils/pyexec.c
${MICROPY_DIR}/lib/utils/stdout_helpers.c
)
target_sources(app PRIVATE
${MICROPY_SOURCE_PY}
${MICROPY_SOURCE_PORT}
)
target_link_libraries(app PRIVATE ${MICROPY_TARGET})
include(${MICROPY_DIR}/py/mkrules.cmake)
Я получаю ошибку во время работы:
Ошибка CMake в строке 33 : не удается указать источники для целевого «приложения», которое не создано этим проектом.
Я принимаю помощь от этого: https://github.com/micropython/micropython/blob/master/ports/zephyr/CMakeLists.txt , но я думаю, что мне не хватает некоторых шагов.
Комментарии:
1. Вам не хватает
add_excutable(app)
(при условии, что вашей конечной целью является исполняемый файл — в противном случае требуетсяadd_library
илиadd_custom_target
).2. @kaylum конечная цель —
firmware.elf
файл.