Вручную связать две цели - PullRequest
       21

Вручную связать две цели

0 голосов
/ 29 января 2020

Я пытаюсь преобразовать (небрежный) Makefile в CMakeLists.txt, чтобы лучше работать с моей IDE (CLion). Мой Makefile выглядит следующим образом:

all:
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot0.o boot/boot0/boot0.S
        ld -nostdlib -m elf_i386 -N -e start -Ttext 0x7c00 -o bin/boot0.elf bin/boot0.o
        objcopy -S -O binary bin/boot0.elf bin/boot0
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot1.o boot/boot1/boot1.S
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot1main.o boot/boot1/boot1main.c
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/boot1lib.o boot/boot1/boot1lib.c
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -Os -g -m32 -I. -c -o bin/exec_kernel.o boot/boot1/exec_kernel.S
        ld -nostdlib -m elf_i386 -N -e start -Ttext 0xd7000 -o bin/boot1.elf bin/boot1.o bin/boot1main.o bin/boot1lib.o bin/exec_kernel.o
        objcopy -S -O binary bin/boot1.elf bin/boot1
        gcc -MD -fno-builtin -nostdinc -fno-stack-protector -D_KERN_ -Ikern -Ikern/kern -I. -m32 -O0 -c -o bin/entry.o kern/init/entry.S
        ld -o kernel -nostdlib -e start -m elf_i386 -Ttext=0x00100000 bin/entry.o -b binary
        dd if=/dev/zero of=project0.img bs=512 count=256
        parted -s project0.img "mktable msdos mkpart primary 63s -1s set 1 boot on"
        dd if=bin/boot0 of=project0.img bs=446 count=1 conv=notrunc
        dd if=bin/boo1 of=project0.img bs=512 count=62 seek=1 conv=notrunc
        dd if=kern/init/kernel of=project0.img bs=512 seek=63 conv=notrunc

В основном я использую make только для запуска команд.

У меня проблемы с тем, что у меня есть три разных набора компоновщика флаги (по одному для boot0, boot1 и kern.)

Должен ли я создать отдельный CMakeLists.txt в каждом подкаталоге (boot0, boot1 и kern), а затем иметь основной, который запускает каждый по очереди, а затем обрабатывает использование dd и parted, есть ли лучший способ сделать это, или CMake не подходит здесь?

1 Ответ

1 голос
/ 29 января 2020

Пожалуйста, сначала используйте ярлыки для команд компилятора. Затем напишите правило для создания первой цели, от которой зависит вторая цель. Затем, так как первая цель создана; Теперь используйте его для создания второй цели.

...