Компиляция отдельных файлов проекта, а не всего проекта? - PullRequest
0 голосов
/ 18 марта 2020

Я использую Raspbian на Raspberry Pi 4 и хочу внести изменения в открытый исходный код. Проект довольно большой и поставляется с Makefile. Я делаю изменения в исходном коде, используя Geany. Затем я снова запускаю Makefile, который, как мне кажется, компилирует каждый файл в проекте. Это занимает довольно много времени. Так, например, если я буду sh вставлять оператор print в функцию, чтобы посмотреть, что происходит, мне придется перекомпилировать весь проект? Должен быть более эффективный способ отладки кода C ++, чем этот.

На протяжении моей степени я прошел несколько классов программирования, но ни один из них не был основан на Linux, и вся курсовая работа содержалась в среде IDE. Я также подозреваю, что многие из моих подходов не могут быть типичными или оптимальными при программировании. Любая помощь очень ценится.

Спасибо, Кевин

РЕДАКТИРОВАТЬ - Включая make file:

ifndef CONFIG
    CONFIG=Release
endif

ifndef LIBDIR
    LIBDIR=/usr/lib/
endif

DPKG := $(shell dpkg-buildflags --version 2> /dev/null)

ifdef DPKG
    DEB_BUILD_MAINT_OPTIONS = hardening=+all
    SDEBCXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS)
    SDEBLDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)

    DEB_BUILD_MAINT_OPTIONS=hardening=+bindnow
    PDEBCXXFLAGS := $(shell dpkg-buildflags --get CXXFLAGS)
    PDEBLDFLAGS := $(shell dpkg-buildflags --get LDFLAGS)
endif

MACHINE := $(shell sh -c 'uname -m 2> /dev/null || echo not')
ifneq (,$(findstring aarch,$(MACHINE)))
    SIMDFLAGS := -march=armv8-a -mtune=cortex-a53
else
ifneq (,$(findstring arm,$(MACHINE)))
    SIMDFLAGS := -march=armv8-a -mtune=cortex-a53 -mfpu=neon-fp-armv8 -mfloat-abi=hard
else
    SIMDFLAGS := -msse2
endif
endif

PROGRAM = helm
BIN     = $(DESTDIR)/usr/bin
BINFILE = $(BIN)/$(PROGRAM)
LV2     = $(DESTDIR)/$(LIBDIR)/lv2/$(PROGRAM).lv2
VSTDIR  = $(DESTDIR)/$(LIBDIR)/lxvst
VST     = $(VSTDIR)/$(PROGRAM).so
SYSDATA = $(DESTDIR)/usr/share/$(PROGRAM)
IMAGES  = $(SYSDATA)/icons
PATCHES = $(SYSDATA)/patches
MAN     = $(DESTDIR)/usr/share/man/man1/
CHANGES = $(DESTDIR)/usr/share/doc/$(PROGRAM)/
DESKTOP = $(DESTDIR)/usr/share/applications/

ICONS   = $(DESTDIR)/usr/share/icons/hicolor/
ICON16  = images/helm_icon_16_1x.png
ICON22  = images/helm_icon_22_1x.png
ICON24  = images/helm_icon_24_1x.png
ICON32  = images/helm_icon_32_1x.png
ICON48  = images/helm_icon_48_1x.png
ICON64  = images/helm_icon_32_2x.png
ICON128 = images/helm_icon_128_1x.png
ICON256 = images/helm_icon_256_1x.png

ICONDEST16 = $(ICONS)/16x16/apps
ICONDEST22 = $(ICONS)/22x22/apps
ICONDEST24 = $(ICONS)/24x24/apps
ICONDEST32 = $(ICONS)/32x32/apps
ICONDEST48 = $(ICONS)/48x48/apps
ICONDEST64 = $(ICONS)/64x64/apps
ICONDEST128 = $(ICONS)/128x128/apps
ICONDEST256 = $(ICONS)/256x256/apps

all: standalone lv2 vst

install_icons:
    install -d $(ICONDEST16) $(ICONDEST22) $(ICONDEST24) $(ICONDEST32)
    install -d $(ICONDEST48) $(ICONDEST64) $(ICONDEST128) $(ICONDEST256)
    cp $(ICON16) $(ICONDEST16)/$(PROGRAM).png
    cp $(ICON22) $(ICONDEST22)/$(PROGRAM).png
    cp $(ICON24) $(ICONDEST24)/$(PROGRAM).png
    cp $(ICON32) $(ICONDEST32)/$(PROGRAM).png
    cp $(ICON48) $(ICONDEST48)/$(PROGRAM).png
    cp $(ICON64) $(ICONDEST64)/$(PROGRAM).png
    cp $(ICON128) $(ICONDEST128)/$(PROGRAM).png
    cp $(ICON256) $(ICONDEST256)/$(PROGRAM).png

standalone:
    $(MAKE) -d -C standalone/builds/linux CONFIG=$(CONFIG) DEBCXXFLAGS="$(SDEBCXXFLAGS)" DEBLDFLAGS="$(SDEBLDFLAGS)" SIMDFLAGS="$(SIMDFLAGS)"

lv2:
    $(MAKE) -C builds/linux/LV2 CONFIG=$(CONFIG) DEBCXXFLAGS="$(PDEBCXXFLAGS)" DEBLDFLAGS="$(PDEBLDFLAGS)" SIMDFLAGS="$(SIMDFLAGS)"

vst:
    $(MAKE) -C builds/linux/VST CONFIG=$(CONFIG) DEBCXXFLAGS="$(PDEBCXXFLAGS)" DEBLDFLAGS="$(PDEBLDFLAGS)" SIMDFLAGS="$(SIMDFLAGS)"

clean:
    $(MAKE) clean -C standalone/builds/linux CONFIG=$(CONFIG)
    $(MAKE) clean -C builds/linux/LV2 CONFIG=$(CONFIG)
    $(MAKE) clean -C builds/linux/VST CONFIG=$(CONFIG)

install_patches:
    rm -rf $(PATCHES)
    install -d $(PATCHES)
    cp -rf patches/* $(PATCHES)

install_standalone: standalone install_patches install_icons
    install -d $(BIN) $(IMAGES) $(MAN) $(CHANGES) $(DESKTOP)
    install standalone/builds/linux/build/$(PROGRAM) $(BIN)
    install -m644 standalone/helm.desktop $(DESKTOP)/helm.desktop
    install -m644 images/* $(IMAGES)
    cp changelog changes
    gzip -n -9 changelog
    mv changes changelog
    mv changelog.gz $(CHANGES)/changelog.gz
    cp docs/helm.1.gz $(MAN)

install_lv2: lv2 install_patches
    install -d $(PATCHES) $(LV2)
    install -m644 builds/linux/LV2/helm.lv2/* $(LV2)
    cp -rf patches/* $(PATCHES)

install_vst: vst install_patches
    install -d $(PATCHES) $(VSTDIR)
    install builds/linux/VST/build/helm.so $(VST)
    cp -rf patches/* $(PATCHES)

thank_you:
ifdef PAID
    install -d $(PATCHES)
    cp docs/thank_you.txt $(PATCHES)
endif

install: install_standalone install_vst install_lv2 thank_you

dist:
    rm -rf $(PROGRAM)
    mkdir $(PROGRAM)
    -cp -rf * $(PROGRAM)/
    $(MAKE) clean -C $(PROGRAM) CONFIG=Release
    $(MAKE) clean -C $(PROGRAM) CONFIG=Debug
    rm -rf $(PROGRAM)/.git
    rm -rf $(PROGRAM)/JUCE/extras
    rm -rf $(PROGRAM)/JUCE/examples
    rm -rf $(PROGRAM)/builds/osx
    rm -rf $(PROGRAM)/builds/vs12
    rm -rf $(PROGRAM)/builds/vs15
    rm -rf $(PROGRAM)/standalone/builds/osx
    rm -rf $(PROGRAM)/standalone/builds/vs12
    rm -rf $(PROGRAM)/standalone/builds/vs15
    tar -cvzf $(PROGRAM).tar.gz $(PROGRAM)
    rm -rf $(PROGRAM)

uninstall:
    rm -rf $(LV2)
    rm -rf $(VST)
    rm -rf $(SYSDATA)
    rm -rf $(BINFILE)
    rm $(ICONDEST16)/$(PROGRAM).png
    rm $(ICONDEST22)/$(PROGRAM).png
    rm $(ICONDEST24)/$(PROGRAM).png
    rm $(ICONDEST32)/$(PROGRAM).png
    rm $(ICONDEST48)/$(PROGRAM).png
    rm $(ICONDEST64)/$(PROGRAM).png
    rm $(ICONDEST128)/$(PROGRAM).png
    rm $(ICONDEST256)/$(PROGRAM).png

.PHONY: standalone
...