Makefile sur Windows 7 avec Gcc
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Makefile sur Windows 7 avec Gcc



  1. #1
    freepicbasic

    Makefile sur Windows 7 avec Gcc


    ------

    Hello,

    J'essaie de compiler baseflight pour NAZE32 (normalement compilé sous linux) avec gcc sur Windows 7.
    Mais le Make me fais quelques soucis.

    J'ai copier le toolschain gcc sur un disk e:
    J'ai essayer un makefile simple de NAZE32 qui fait clignoter une LED
    https://github.com/ahmetonat/Naze32-...-STM32F10x-GCC
    ça compile OK!

    Mais pas avec baseflight;

    Pour les essais, j'ai mis baseflight dans le répertoire bin
    J'ai dû transformer les "/" de linux en "\" de windows tout en respectant les "\" qui permettent de continuer les lignes

    J'ai ajouté ..\ sur les tools qui pointent donc maintenant sur le répertoire bin (ça fonctionne avec le test ci dessus)

    Mais avec ce makefile , le message pas de règle apparait ou "no rules"
    voir l'mage

    On dirait que la règle avec le CC n'est jamais pris en compte...
    Même que celle avec le mkdir ne fonctionne pas non plus.
    le Mkdir existe, j'ai crée depuis la console le répertoire "NAZE"

    Il reste sans doute une erreur, mais je ne la vois pas.

    A+



    Code:
    ###############################################################################
    # "THE BEER-WARE LICENSE" (Revision 42):
    # <msmith@FreeBSD.ORG> wrote this file. As long as you retain this notice you
    # can do whatever you want with this stuff. If we meet some day, and you think
    # this stuff is worth it, you can buy me a beer in return
    ###############################################################################
    #
    # Makefile for building the baseflight firmware.
    #
    # Invoke this with 'make help' to see the list of supported targets.
    # 
    
    ###############################################################################
    # Things that the user might override on the commandline
    #
    
    # The target to build, must be one of NAZE or CJMCU
    TARGET		?= NAZE
    
    # Compile-time options
    OPTIONS		?=
    
    # Debugger optons, must be empty or GDB
    DEBUG ?=
    
    # Serial port/Device for flashing
    SERIAL_DEVICE	?= /dev/ttyUSB0
    
    ###############################################################################
    # Things that need to be maintained as the source changes
    #
    
    VALID_TARGETS = NAZE CJMCU
    
    # Working directories
    ROOT		 = $(dir $(lastword $(MAKEFILE_LIST)))
    SRC_DIR		 = $(ROOT)\src
    CMSIS_DIR	 = $(ROOT)\lib\CMSIS
    STDPERIPH_DIR	 = $(ROOT)\lib\STM32F10x_StdPeriph_Driver
    OBJECT_DIR	 = $(ROOT)\obj
    BIN_DIR		 = $(ROOT)\obj
    
    
    # Source files common to all targets
    COMMON_SRC	 = buzzer.c \
    		   cli.c \
    		   config.c \
    		   imu.c \
    		   main.c \
    		   mixer.c \
    		   mw.c \
    		   sensors.c \
    		   serial.c \
    		   rxmsp.c \
    		   drv_gpio.c \
    		   drv_i2c.c \
    		   drv_i2c_soft.c \
    		   drv_system.c \
    		   drv_serial.c \
    		   drv_uart.c \
    		   printf.c \
    		   utils.c \
    		   fw_nav.c \
    		   ibus.c \
    		   sbus.c \
    		   sumd.c \
    		   spektrum.c \
    		   startup_stm32f10x_md_gcc.S \
    		   $(CMSIS_SRC) \
    		   $(STDPERIPH_SRC)
    
    # Source files for full-featured systems
    HIGHEND_SRC	 = gps.c \
    		   drv_softserial.c \
    		   telemetry_common.c \
    		   telemetry_frsky.c \
    		   telemetry_hott.c
    
    # Source files for the NAZE target
    NAZE_SRC	 = drv_adc.c \
    		   drv_adxl345.c \
    		   drv_ak8975.c \
    		   drv_bma280.c \
    		   drv_bmp085.c \
    		   drv_ms5611.c \
    		   drv_bmp280.c \
    		   drv_hcsr04.c \
    		   drv_hmc5883l.c \
    		   drv_ledring.c \
    		   drv_mma845x.c \
    		   drv_mpu.c \
    		   drv_l3g4200d.c \
    		   drv_pwm.c \
    		   drv_spi.c \
    		   drv_timer.c \
    		   $(HIGHEND_SRC) \
    		   $(COMMON_SRC)
    
    # Source files for the CJMCU target
    CJMCU_SRC	 = drv_adc.c \
    		   drv_mpu.c \
    		   drv_hmc5883l.c \
    		   drv_pwm.c \
    		   drv_timer.c \
    		   $(COMMON_SRC)
    
    # In some cases, %.s regarded as intermediate file, which is actually not.
    # This will prevent accidental deletion of startup code.
    .PRECIOUS: %.s
    
    # Search path for baseflight sources
    VPATH		:= $(SRC_DIR):$(SRC_DIR)\baseflight_startups
    
    # Search path and source files for the CMSIS sources
    VPATH		:= $(VPATH):$(CMSIS_DIR)\CM3\CoreSupport:$(CMSIS_DIR)\CM3\DeviceSupport\ST\STM32F10x
    CMSIS_SRC	 = $(notdir $(wildcard $(CMSIS_DIR)\CM3\CoreSupport\*.c \
    			               $(CMSIS_DIR)\CM3\DeviceSupport\ST\STM32F10x\*.c))
    
    # Search path and source files for the ST stdperiph library
    VPATH		:= $(VPATH):$(STDPERIPH_DIR)\src
    STDPERIPH_SRC	 = $(notdir $(wildcard $(STDPERIPH_DIR)\src\*.c))
    
    ###############################################################################
    # Things that might need changing to use different tools
    #
    
    # Tool names
    CC		 = ..\arm-none-eabi-gcc
    OBJCOPY		 = ..\arm-none-eabi-objcopy
    
    #
    # Tool options.
    #
    INCLUDE_DIRS	 = $(SRC_DIR) \
    		   $(STDPERIPH_DIR)\inc \
    		   $(CMSIS_DIR)\CM3\CoreSupport \
    		   $(CMSIS_DIR)\CM3\DeviceSupport\ST\STM32F10x \
    
    ARCH_FLAGS	 = -mthumb -mcpu=cortex-m3
    
    ifeq ($(DEBUG),GDB)
    OPTIMIZE	 = -Og
    LTO_FLAGS	 = $(OPTIMIZE)
    else
    OPTIMIZE	 = -Os
    LTO_FLAGS	 = -flto -fuse-linker-plugin $(OPTIMIZE)
    endif
    
    DEBUG_FLAGS	 = -ggdb3
    
    CFLAGS		 = $(ARCH_FLAGS) \
    		   $(LTO_FLAGS) \
    		   $(addprefix -D,$(OPTIONS)) \
    		   $(addprefix -I,$(INCLUDE_DIRS)) \
    		   $(DEBUG_FLAGS) \
    		   -std=gnu99 \
    		   -Wall -pedantic -Wextra -Wshadow -Wunsafe-loop-optimizations \
    		   -ffunction-sections \
    		   -fdata-sections \
    		   -DSTM32F10X_MD \
    		   -DUSE_STDPERIPH_DRIVER \
    		   -D$(TARGET)
    
    ASFLAGS		 = $(ARCH_FLAGS) \
    		   -x assembler-with-cpp \
    		   $(addprefix -I,$(INCLUDE_DIRS))
    
    # XXX Map/crossref output?
    LD_SCRIPT	 = $(ROOT)\stm32_flash.ld
    LDFLAGS		 = -lm \
    		   -nostartfiles \
    		   --specs=nano.specs \
    		   -lc \
    		   -lnosys \
    		   $(ARCH_FLAGS) \
    		   $(LTO_FLAGS) \
    		   $(DEBUG_FLAGS) \
    		   -static \
    		   -Wl,-gc-sections,-Map,$(TARGET_MAP) \
    		   -T$(LD_SCRIPT)
    
    ###############################################################################
    # No user-serviceable parts below
    ###############################################################################
    
    #
    # Things we will build
    #
    
    
    
    ifeq ($(filter $(TARGET),$(VALID_TARGETS)),)
    $(error Target '$(TARGET)' is not valid, must be one of $(VALID_TARGETS))
    endif
    
    
    TARGET_HEX	 = $(BIN_DIR)\baseflight_$(TARGET).hex
    TARGET_ELF	 = $(BIN_DIR)\baseflight_$(TARGET).elf
    TARGET_OBJS	 = $(addsuffix .o,$(addprefix $(OBJECT_DIR)\$(TARGET)\,$(basename $($(TARGET)_SRC))))
    TARGET_MAP   = $(OBJECT_DIR)\baseflight_$(TARGET).map
    
    # List of buildable ELF files and their object dependencies.
    # It would be nice to compute these lists, but that seems to be just beyond make.
    
    
    $(TARGET_HEX): $(TARGET_ELF)
    	$(OBJCOPY) -O ihex --set-start 0x8000000 $< $@
    
    $(TARGET_ELF):  $(TARGET_OBJS)
    	$(CC) -o $@ $^ $(LDFLAGS)
    
    MKDIR_OBJDIR = @mkdir  $(dir $@)
    
    # Compile
    (OBJECT_DIR)\$(TARGET)\%.o: %.c
    	$(MKDIR_OBJDIR)
    	@echo %% $(notdir $<)
    	@$(CC) -c -o $@ $(CFLAGS) $<
    
    # Assemble
    $(OBJECT_DIR)\$(TARGET)\%.o: %.s
    	$(MKDIR_OBJDIR)
    	@echo %% $(notdir $<)
    	@$(CC) -c -o $@ $(ASFLAGS) $< 
    $(OBJECT_DIR)\$(TARGET)\.o): %.S
    	$(MKDIR_OBJDIR)
    	@echo %% $(notdir $<)
    	@$(CC) -c -o $@ $(ASFLAGS) $< 
    
    #clean:
    	rm -f $(TARGET_HEX) $(TARGET_ELF) $(TARGET_OBJS) $(TARGET_MAP)
    
    #flash_$(TARGET): $(TARGET_HEX)
    	stty -F $(SERIAL_DEVICE) raw speed 115200 -crtscts cs8 -parenb -cstopb -ixon
    	echo -n 'R' >$(SERIAL_DEVICE)
    	stm32flash -w $(TARGET_HEX) -v -g 0x0 -b 115200 $(SERIAL_DEVICE)
    
    flash: flash_$(TARGET)
    
    
    unbrick_$(TARGET): $(TARGET_HEX)
    	stty -F $(SERIAL_DEVICE) raw speed 115200 -crtscts cs8 -parenb -cstopb -ixon
    	stm32flash -w $(TARGET_HEX) -v -g 0x0 -b 115200 $(SERIAL_DEVICE)
    
    unbrick: unbrick_$(TARGET)
    
    help:
    	@echo ""
    	@echo "Makefile for the baseflight firmware"
    	@echo ""
    	@echo "Usage:"
    	@echo "        make [TARGET=<target>] [OPTIONS=\"<options>\"]"
    	@echo ""
    	@echo "Valid TARGET values are: $(VALID_TARGETS)"
    	@echo ""

    -----
    Images attachées Images attachées  
    A+, pat

  2. #2
    Chanur

    Re : Makefile sur Windows 7 avec Gcc

    Bonjour,

    Vu la sortie du make, ROOT = $(dir $(lastword $(MAKEFILE_LIST))) donne une chaîne vide.
    Où as-tu défini MAKEFILE_LIST ? C'est une variable d'environnement ?


    Pourquoi as-tu écrit un Makefile aussi compliqué ? C'est assez simple, en général.
    Ce qui se conçoit bien s'énonce clairement ; et les mots pour le dire arrivent aisément.

  3. #3
    freepicbasic

    Re : Makefile sur Windows 7 avec Gcc

    J'ai repris le make fournis mais effectivement il est assez complexe.

    Le MAKEFILE_LIST semble être un paramètre saisie lorsqu'on fait MAKE paramètre
    ttps://ftp.gnu.org/old-gnu/Manuals/make/html_node/make_17.html

    J'ai mis le ROOT en dur , ça change rien.

    Ce que je ne comprend pas c est pourquoi il ne prend pas les listes.
    Il devrait compiler

    # Compile
    (OBJECT_DIR)\$(TARGET)\%.o: %.c
    $(MKDIR_OBJDIR)
    @echo %% $(notdir $<)
    @$(CC) -c -o $@ $(CFLAGS) $<
    A+, pat

  4. #4
    pm42

    Re : Makefile sur Windows 7 avec Gcc

    Propositions :

    - rajoute le $ manquant dans la ligne qui fait la compilation des .c. Actuellement c'est (OBJECT_DIR)\$(TARGET)\%.o: %.c, pas $(OBJECT_DIR)\$(TARGET)\%.o: %.c

    Sinon :
    - essaie un autre make
    - lance le avec les options de debug, -d pour commencer
    - ajoute une target
    display:
    echo $(OBJECT_DIR)\$(TARGET)

    et fait make display
    Ce principe permet de connaitre facilement les variables, les règles et avec les retour du debug, de savoir où ça merde.

  5. A voir en vidéo sur Futura
  6. #5
    freepicbasic

    Re : Makefile sur Windows 7 avec Gcc

    merci pour ton aide
    je ne connaissais pas -display
    ça en affiche même un peu trop, il fait aussi appel à yac et lex etc... de quoi me faire perdre le reste de mes cheveux LOL , bref l'usine à gaz !

    J'ai avancé un peu
    Le répertoire "obj" est protégé en écriture .
    je l'ai effacé et recréé, il se se remet protégé...
    Pourquoi ? mystère !

    Bon j'ai mis un seul fichier , avec "obj2" (ruse de sioux LOL) ça compile !
    Mais la boucle ne fonctionne toujours pas avec la liste.

    Si je dois remettre tout les fichiers un par un , galère ...



    Je pensais qu'il fallait mettre le nom de la list comme ça;

    Code:
    all : $(COMMON_SRC)
    # Compile
    $(OBJECT_DIR)\$(TARGET)\%.o: $(SRC_DIR)\$(COMMON_SRC)\%.c
    	$(MKDIR_OBJDIR)
    	@echo %% $(notdir $<)
    	@$(CC) -c -o $@ $(CFLAGS) $<
    pareil !



    en s'inspirant de ça;
    Code:
    objects = file1.o file2.o file3.o
    
    all: $(objects)
    
    $(objects): %.o: %.cpp
            $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
    trouvé sur le net
    A+, pat

Discussions similaires

  1. Makefile
    Par Ubiquitous dans le forum Programmation et langages, Algorithmique
    Réponses: 14
    Dernier message: 07/12/2016, 14h37
  2. Windows 7/problème avec l'exécutable des jeux windows
    Par Manu Dibango dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 16/09/2015, 13h56
  3. Probléme lecteur Windows Média avec Windows 8.1
    Par pascaldenis06 dans le forum Matériel - Hardware
    Réponses: 2
    Dernier message: 14/04/2014, 15h17
  4. Problème avec Makefile + SDL en C
    Par invite45ca6d89 dans le forum Programmation et langages, Algorithmique
    Réponses: 4
    Dernier message: 05/10/2011, 20h49
  5. Programmation C sous Windows XP : debugger, Makefile
    Par invitec392daab dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 30/01/2006, 10h46