Red Hat ಉದ್ಯೋಗಿಯೊಬ್ಬರು ಗೋಲ್ಸ್ ಅಸೆಂಬ್ಲಿ ವ್ಯವಸ್ಥೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಿದರು. GNU ಮೇಕ್ 4.2 ಬಿಡುಗಡೆ

ರಿಚರ್ಡ್ WM ಜೋನ್ಸ್, ಲೇಖಕ libguestfs, Red Hat ನಲ್ಲಿ ಕೆಲಸ, ಪರಿಚಯಿಸಲಾಗಿದೆ ಹೊಸ ಅಸೆಂಬ್ಲಿ ಉಪಯುಕ್ತತೆ ಗುರಿಗಳು, ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳ ಒಟ್ಟಾರೆ ಸರಳತೆ ಮತ್ತು ತಿಳುವಳಿಕೆಯನ್ನು ಕಾಪಾಡಿಕೊಳ್ಳುವಾಗ ತಯಾರಿಕೆಯ ಉಪಯುಕ್ತತೆಯಲ್ಲಿನ ನ್ಯೂನತೆಗಳು ಮತ್ತು ಸಮಸ್ಯೆಗಳನ್ನು ತೆಗೆದುಹಾಕುವ ಗುರಿಯನ್ನು ಹೊಂದಿದೆ. ಮೇಕ್ ಯುಟಿಲಿಟಿ ಅನ್ನು 1976 ರಲ್ಲಿ ವಿನ್ಯಾಸಗೊಳಿಸಲಾಗಿದೆ ಮತ್ತು ಸಾಮಾನ್ಯ ಪರಿಕಲ್ಪನೆಯನ್ನು ಬದಲಾಯಿಸದೆಯೇ ಈ ನ್ಯೂನತೆಗಳನ್ನು ನಿವಾರಿಸಲು ಹಲವಾರು ಪರಿಕಲ್ಪನೆಯ ನ್ಯೂನತೆಗಳನ್ನು ಹೊಂದಿದೆ.
ಗುರಿಗಳ ಮೂಲ ಕೋಡ್ ವಿತರಿಸುವವರು GPLv2+ ಅಡಿಯಲ್ಲಿ ಪರವಾನಗಿ ಪಡೆದಿದೆ.

ಪರಿಹರಿಸಬಹುದಾದ ಸಮಸ್ಯೆಗಳು:

  • ಕೇವಲ ಒಂದು ಅವಲಂಬನೆ ರೆಸಲ್ಯೂಶನ್ ತಂತ್ರಕ್ಕೆ ಬೆಂಬಲ - "ಟಾರ್ಗೆಟ್ ಫೈಲ್ ಕಾಣೆಯಾಗಿದ್ದರೆ ಅಥವಾ ಅವಲಂಬನೆಗಳಲ್ಲಿ ಒಂದಕ್ಕಿಂತ ಹಳೆಯದಾಗಿದ್ದರೆ ಅಸೆಂಬ್ಲಿ ಸೂಚನೆಯು ರನ್ ಆಗುತ್ತದೆ." URL ಇರುವಿಕೆಯನ್ನು ಪರಿಶೀಲಿಸುವುದು, ಯಾವುದೇ ಫೈಲ್‌ನೊಂದಿಗೆ ಮಾರ್ಪಾಡು ಸಮಯವನ್ನು ಹೋಲಿಸುವುದು, ಪ್ಯಾಕೇಜ್ ಬಿಲ್ಡ್ ಇನ್ ಅನ್ನು ಮೌಲ್ಯಮಾಪನ ಮಾಡುವುದು ಮುಂತಾದ ಇತರ ತಂತ್ರಗಳನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸಲು ಗುರಿಗಳು ಯೋಜಿಸುತ್ತವೆ. ಕೊಜಿ, ಚೆಕ್‌ಸಮ್‌ಗಳ ಹೋಲಿಕೆ, ಪರೀಕ್ಷೆಗಳ ಆಯ್ದ ಸ್ಕಿಪ್ಪಿಂಗ್‌ನೊಂದಿಗೆ ಪರೀಕ್ಷಾ ಪ್ರಕರಣಗಳನ್ನು ಚಾಲನೆ ಮಾಡುವುದು.
  • ಬಿಲ್ಡ್ ಟಾರ್ಗೆಟ್‌ಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸುವಾಗ, ಮೇಕ್ ಫೈಲ್‌ಗಳು ಮತ್ತು ನಿಯಮದ ಹೆಸರುಗಳನ್ನು ಪ್ರತ್ಯೇಕಿಸುವುದಿಲ್ಲ ಮತ್ತು ಪರಿಣಾಮವಾಗಿ, ನಿಯಮವನ್ನು ಚಲಾಯಿಸುವಾಗ, ಅದು ರಚಿಸಲಾಗಿದೆ ಎಂದು ಹೇಳಿಕೊಳ್ಳುವ ಫೈಲ್ ಅನ್ನು ವಾಸ್ತವವಾಗಿ ರಚಿಸಲಾಗುತ್ತದೆ ಎಂದು ಯಾವುದೇ ಪರಿಶೀಲನೆ ಇಲ್ಲ. ಉದಾಹರಣೆಗೆ, ನೀವು ಪರೀಕ್ಷೆಗಳೊಂದಿಗೆ ಸ್ಕ್ರಿಪ್ಟ್‌ಗಳನ್ನು ಚಲಾಯಿಸುವ "ಪರೀಕ್ಷೆ" ಎಂಬ ನಿಯಮವನ್ನು ಹೊಂದಿದ್ದರೆ, "ಪರೀಕ್ಷೆ" ಎಂಬ ಹೆಸರಿನ ಫೈಲ್ ಅನ್ನು ಆಕಸ್ಮಿಕವಾಗಿ ರಚಿಸಲಾಗಿದೆ, ನಂತರ ಪರೀಕ್ಷೆಗಳನ್ನು ಇನ್ನು ಮುಂದೆ ಕರೆಯಲಾಗುವುದಿಲ್ಲ, ಏಕೆಂದರೆ ಮೇಕ್ ಗುರಿಯನ್ನು ನಿರ್ಮಿಸಲಾಗಿದೆ ಮತ್ತು ಅಗತ್ಯವಿಲ್ಲ ಎಂದು ಪರಿಗಣಿಸುತ್ತದೆ. ಯಾವುದೇ ಕ್ರಿಯೆ (ತಯಾರಿಕೆಯಲ್ಲಿನ ಸಮಸ್ಯೆಯನ್ನು ಪರಿಹರಿಸಲು, ನೀವು “.PHONY: test” ನಿರ್ದೇಶನವನ್ನು ನಿರ್ದಿಷ್ಟಪಡಿಸಬಹುದು). ಗುರಿಗಳು ಫೈಲ್‌ಗಳು ಮತ್ತು ನಿಯಮದ ಹೆಸರುಗಳನ್ನು ಸ್ಪಷ್ಟವಾಗಿ ಪ್ರತ್ಯೇಕಿಸುತ್ತದೆ.

    Red Hat ಉದ್ಯೋಗಿಯೊಬ್ಬರು ಗೋಲ್ಸ್ ಅಸೆಂಬ್ಲಿ ವ್ಯವಸ್ಥೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಿದರು. GNU ಮೇಕ್ 4.2 ಬಿಡುಗಡೆ

  • ಅಸೆಂಬ್ಲಿ ಸೂಚನೆಗಳಿಗಾಗಿ ಕೇವಲ ಒಂದು ನಿಯತಾಂಕವನ್ನು ಒದಗಿಸುವಲ್ಲಿ ಸಮಸ್ಯೆ.

    Red Hat ಉದ್ಯೋಗಿಯೊಬ್ಬರು ಗೋಲ್ಸ್ ಅಸೆಂಬ್ಲಿ ವ್ಯವಸ್ಥೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಿದರು. GNU ಮೇಕ್ 4.2 ಬಿಡುಗಡೆ

    ಹೆಸರಿಸಲಾದ ನಿಯತಾಂಕಗಳ ಅನಿಯಂತ್ರಿತ ಸಂಖ್ಯೆಯನ್ನು ಬಳಸಲು ಗುರಿಗಳು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ನೀವು ಹೆಸರಿನಿಂದ ಡೀಬಗ್ ಫೈಲ್‌ನ ಚಿಹ್ನೆಯನ್ನು ಪ್ರತ್ಯೇಕವಾಗಿ ಹೊರತೆಗೆಯಬಹುದು:

    Red Hat ಉದ್ಯೋಗಿಯೊಬ್ಬರು ಗೋಲ್ಸ್ ಅಸೆಂಬ್ಲಿ ವ್ಯವಸ್ಥೆಯನ್ನು ಪ್ರಸ್ತುತಪಡಿಸಿದರು. GNU ಮೇಕ್ 4.2 ಬಿಡುಗಡೆ

  • ಶೆಲ್ ಇಂಟರ್ಪ್ರಿಟರ್ನೊಂದಿಗೆ ಸಂವಹನ ನಡೆಸುವ ಸಮಸ್ಯೆಗಳು. ಉದಾಹರಣೆಗೆ, ಫೈಲ್ ಮತ್ತು ಡೈರೆಕ್ಟರಿ ಹೆಸರುಗಳಲ್ಲಿನ ಸ್ಥಳಗಳ ತಪ್ಪಿಸಿಕೊಳ್ಳುವಿಕೆಯನ್ನು ನಿಯಂತ್ರಿಸುವ ಅಗತ್ಯತೆ, ಪ್ರತಿ ಆಜ್ಞೆಯನ್ನು ಕಾರ್ಯಗತಗೊಳಿಸುವಾಗ ಪ್ರತ್ಯೇಕ ಶೆಲ್ ಇಂಟರ್ಪ್ರಿಟರ್ ಅನ್ನು ಪ್ರಾರಂಭಿಸಲು ಸಂಪನ್ಮೂಲಗಳ ವ್ಯರ್ಥ, "$" ಅಕ್ಷರದ ಡಬಲ್ ವ್ಯಾಖ್ಯಾನ (ಶೆಲ್ ಮತ್ತು ಮೇಕ್ ಎರಡರಲ್ಲೂ ಬಳಸಲಾಗುತ್ತದೆ), ಇಂಡೆಂಟೇಶನ್‌ಗಳನ್ನು ಗಣನೆಗೆ ತೆಗೆದುಕೊಳ್ಳುವುದು.

    ಅಸೆಂಬ್ಲಿ ವೇರಿಯೇಬಲ್‌ಗಳಿಗಾಗಿ "$" ಬದಲಿಗೆ "%" ಚಿಹ್ನೆಯನ್ನು ಬಳಸುವ ಮೂಲಕ ಈ ಸಮಸ್ಯೆಗಳನ್ನು ಗುರಿಗಳಲ್ಲಿ ಪರಿಹರಿಸಲಾಗುತ್ತದೆ ("$" ಶೆಲ್‌ಗೆ ಮಾತ್ರ ಉಳಿದಿದೆ), ಪಾರ್ಸರ್ ಬಳಸಿ LALR(1), ನೀವು ಉಲ್ಲೇಖಗಳೊಂದಿಗೆ ಮಾರ್ಗಗಳು ಮತ್ತು ಫೈಲ್ ಹೆಸರುಗಳನ್ನು ಸುತ್ತುವರೆದಿರುವುದು ಮತ್ತು ಕರ್ಲಿ ಬ್ರೇಸ್‌ಗಳೊಂದಿಗೆ ಕೋಡ್ ಬ್ಲಾಕ್‌ಗಳನ್ನು ಹೈಲೈಟ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ. ಸಂಪೂರ್ಣ ಕಮಾಂಡ್ ಬ್ಲಾಕ್ ಅನ್ನು ಕಮಾಂಡ್ ಶೆಲ್‌ನ ಒಂದು ನಿದರ್ಶನದಲ್ಲಿ ಪ್ರಾರಂಭಿಸಲಾಗುತ್ತದೆ ಮತ್ತು ವಿಶೇಷ ಸ್ಥಳಗಳನ್ನು ಉಲ್ಲೇಖಿಸದೆ ಬ್ಲಾಕ್‌ನೊಳಗೆ ಅನಿಯಂತ್ರಿತ ಕೋಡ್ ಫಾರ್ಮ್ಯಾಟಿಂಗ್ ಅನ್ನು ಅನುಮತಿಸಲಾಗುತ್ತದೆ.

    ಅದು:
    ಗುರಿ: foo.o bar.o
    ${CC} ${CFLAGS} $< -o $@

    ಅದು ಹಾಗಯಿತು:
    "ಗುರಿ": "foo.o", "bar.o" {
    %CC %CFLAGS %< -o %@
    }

ಗುರಿಗಳ ಇತರ ಲಕ್ಷಣಗಳು:

  • ಅನಿಯಂತ್ರಿತ ಹೆಸರುಗಳು ಮತ್ತು ನಿಯತಾಂಕಗಳನ್ನು ಸೂಚಿಸಲು ಐಚ್ಛಿಕ ಬೆಂಬಲ:

    ಗುರಿ ಎಲ್ಲಾ =: "ಗುರಿ"

    ಗುರಿ ಲಿಂಕ್ =
    "ಗುರಿ" : "foo.o", "bar.o" { ...}

    ಗೋಲ್ ಕಂಪೈಲ್ (ಹೆಸರು) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@}

  • ಎರಡು ಉಡಾವಣಾ ವಿಧಾನಗಳು: ಫೈಲ್‌ಹೆಸರುಗಳೊಂದಿಗೆ ಬಿಲ್ಡ್ ಟಾರ್ಗೆಟ್‌ಗಳನ್ನು ಹೊಂದಿಸಲು ಮೋಡ್ ಮಾಡಿ (ಉದಾಹರಣೆಗೆ, ಫೈಲ್ "foo.o" ಗುರಿ "%name.o" ಗೆ ಹೊಂದಿಕೆಯಾಗುತ್ತದೆ), ಮತ್ತು ನೇರ ಸಂಕಲನ ಮೋಡ್:

    ಗುರಿ ಎಲ್ಲಾ =: ಲಿಂಕ್

    ಗುರಿ ಲಿಂಕ್ =
    "ಗುರಿ" : "foo.o", ಕಂಪೈಲ್ ("ಬಾರ್") { ...}

    ಗೋಲ್ ಕಂಪೈಲ್ (ಹೆಸರು) =
    "%name.o" : "%name.c", "dep.h" { %CC %CFLAGS -c $^ -o $@}

  • ಅಸೆಂಬ್ಲಿ ತಂತ್ರಗಳನ್ನು ವಿಶೇಷ ನಿಯಮಗಳಿಂದ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ, ಇದನ್ನು ಅಸೆಂಬ್ಲಿ ಗುರಿಯನ್ನು ಮರುಜೋಡಿಸುವ ಅಗತ್ಯವನ್ನು ನಿರ್ಧರಿಸಲು ಬಳಸಬಹುದು. ಫೈಲ್‌ನ ಉಪಸ್ಥಿತಿಗೆ ಲಿಂಕ್ ಮಾಡಿದರೆ, ಇದನ್ನು ಅನುಗುಣವಾದ ಚಿಹ್ನೆಯ ಮೂಲಕ ಸ್ಪಷ್ಟವಾಗಿ ನಿರ್ಧರಿಸಲಾಗುತ್ತದೆ (ನಿಯಮ ಹೆಸರಿಗಾಗಿ “ಗುರಿ” ಮತ್ತು ಫೈಲ್ ಅನ್ನು ಪರಿಶೀಲಿಸಲು * ಫೈಲ್ (“ಟಾರ್ಗೆಟ್”)).

    "ಗುರಿ" : "foo.o", "bar.o" { ...}

    *file("ಗುರಿ") : *file("foo.o"), *file("bar.o") { ...}

  • ಡೆವಲಪರ್ ಅಸೆಂಬ್ಲಿ ತಂತ್ರಗಳ ಅನಿಯಂತ್ರಿತ ಗುಣಲಕ್ಷಣಗಳನ್ನು ವ್ಯಾಖ್ಯಾನಿಸಬಹುದು. "*ಫೈಲ್" ಫ್ಲ್ಯಾಗ್ ಅನ್ನು ಪೂರ್ವನಿಯೋಜಿತವಾಗಿ ವ್ಯಾಖ್ಯಾನಿಸಲಾಗಿದೆ (@{...} ಔಟ್‌ಪುಟ್‌ನ ನಿಗ್ರಹವನ್ನು ಸೂಚಿಸುತ್ತದೆ ಮತ್ತು "ನಿರ್ಗಮನ 99" ಮರುನಿರ್ಮಾಣದ ಅಗತ್ಯವನ್ನು ಸೂಚಿಸುತ್ತದೆ):

    ತಂತ್ರ *ಫೈಲ್ (ಫೈಲ್ ಹೆಸರು) = @{
    test -f %ಫೈಲ್ ಹೆಸರು || ನಿರ್ಗಮನ 99
    % ರಲ್ಲಿ f ಗಾಗಿ

    ಮೂಲ: opennet.ru

ಕಾಮೆಂಟ್ ಅನ್ನು ಸೇರಿಸಿ