makefile在Make-linux和Make MinGW中的解释不同

wfypjpf4  于 12个月前  发布在  Linux
关注(0)|答案(2)|浏览(185)

在Make文件中,我们有:

TARGET = CAN_PWM_test
BUILD_DIR = build

字符串
第一个月

$(BUILD_DIR)/%.o: %.c %.cpp Makefile | $(BUILD_DIR)
    $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@


$(BUILD_DIR)/$(TARGET).elf: $(OBJECTS) Makefile
    $(CC) $(OBJECTS) $(LDFLAGS) -o $@
    $(SZ) $@


在Linux中,我接收消息:
>make: *** No rule to make target 'build/main.o', needed by 'build/CAN_PWM_test.elf'. Stop.
但在Windows与MinGW的作品。我做错了什么?
(full github上的项目:Link
在Makefile中,我们有类似于windows的GCCPATH,对于Linux,我注解了它。但这没有帮助。

> make -v 
GNU Make 4.4.1
Built for x86_64-pc-linux-gnu

csbfibhn

csbfibhn1#

这条规则...

$(BUILD_DIR)/%.o: %.c %.cpp Makefile | $(BUILD_DIR)
        $(CC) -c $(CFLAGS) -Wa,-a,-ad,-alms=$(BUILD_DIR)/$(notdir $(<:.c=.lst)) $< -o $@

字符串
.描述了如何从对应的.c文件和对应的.cpp文件一起构建一个目标文件。虽然它在这方面是谎言的,因为实际上它只使用.c文件。这个规则不适用于构建一个没有对应的.c文件和对应的.cpp文件的目标文件。
在Linux中,我接收消息:
第一个月
很有可能。
但在Windows与MinGW的作品。
我不相信你。项目的某些方面在双方之间是不同的--也许是makefile,也许是源目录的内容,也许两者都是。这不是同一个“那个”。
我做错了什么?
你编写了一个模式规则,但前提条件不正确。如果你有C和C++源代码的混合,那么你应该为这两个代码分别编写规则。这也会给你提供机会为这些规则编写不同的 * 配方 *,这通常是明智的。

0ejtzxu1

0ejtzxu12#

@John,谢谢你对模式规则的澄清,我不知道它是如何工作的。
你对I do not believe you:这条规则是行不通的,但MinGW回答不同:

"C:/Program Files/arm-gnu-toolchain-13.2.rel1-mingw-w64-i686-arm-none-eabi/bin"/arm-none-eabi-gcc -x assembler-with-cpp -c -mcpu=cortex-m4 -mthumb -mfpu=fpv4-sp-d16 -mfloat-abi=hard -DUSE_HAL_DRIVER -DSTM32F303xC -IInc -IDrivers/STM32F3xx_HAL_Driver/Inc -IDrivers/STM32F3xx_HAL_Driver/Inc/Legacy -IDrivers/CMSIS/Device/ST/STM32F3xx/Include -IDrivers/CMSIS/Include -Og -Wall -fdata-sections -ffunction-sections -g -gdwarf-2 -IDrivers -IDrivers/tm1638-library Drivers/WProgram.cpp Drivers/tm1638-library/TM1638.cpp  -x c++ -MMD -MP -MF"build/startup_stm32f303xc.d" startup_stm32f303xc.s -o build/startup_stm32f303xc.o
arm-none-eabi-gcc.exe: fatal error: cannot specify '-o' with '-c', '-S' or '-E' with multiple files
compilation terminated.
make: *** [build/startup_stm32f303xc.o] ������ 1

字符串
问题是项目包含C和C++的模块,它们需要一起构建。
正如我从你的回答中理解的那样:我需要制定两个不同的规则来组装.o和.cpp
我会努力的。谢谢你的帮助!

相关问题