Skip to content

Wcięcia i kontynuacje linii w Makefile #16

@cameel

Description

@cameel

Nie mamy spisanych zasad dla Makefile, i wyłapałem właśnie w review kilka kosmetycznych problemów, których można by łatwo uniknąć, więc proponuję dodać kilka zasad do wiki:

Spacje i wcięcia

  1. W Makefile używamy spacji poza przypadkami, gdzie taby są wymagane składniowo.
    • Taby wymagane są jedynie wewnątrz definicji targetów.
  2. Wcięcia powinny mieć długość 4 spacji (jak w całej reszcie naszego kodu).

Przykład
Miejsca gdzie wystepują taby zastąpione zostały znakami »»»».

VARIABLE := \
    value1  \
    value2  \
    value3

target:           \
    prerequisite1 \
    prerequisite2 \
    prerequisite2
»»»»command1
»»»»command2
»»»»command3

Kontynuacje linii

  1. Preferowane:

    verifier!dependencies:                                \
        $(VERIFIER_SOURCE)                                \
        build/repositories/golem/                         \
        build/verifier/golem/scripts/                     \
        build/verifier/golem/imgverifier-requirements.txt

    Ten wariant jest najczytelniejszy i zalecany.

  2. Dozwolone:

    verifier!dependencies: \
        $(VERIFIER_SOURCE) \
        build/repositories/golem/ \
        build/verifier/golem/scripts/ \
        build/verifier/golem/imgverifier-requirements.txt

    Ten wariant jest dozwolony w sytuacjach gdy edytor nie pozwala nam łatwo wyrównać kontynuacji albo gdy edytujemy w sytuacji gdy znaki nie mają stałej szerokości.
    Wariant pierwszy jest mimo wszystko mocno preferowany.
    Kontynuacje linijek dodają trochę zbędnego wizualnego szumu do definicji, a większość edytorów spokojnie poradzi sobie z wygodną edycją wariantu 1.

  3. Dozwolone:

    verifier!dependencies:                                     \
        $(VERIFIER_SOURCE)                                     \
        build/repositories/golem/                              \
        build/verifier/golem/scripts/                          \
        build/verifier/golem/imgverifier-requirements.txt

    Aby uniknąć zbyt częstego przesuwania kontynuacji można dodać trochę więcej odstępu...

  4. Zabronione:

    verifier!dependencies:                                                                                                                                                        \
        $(VERIFIER_SOURCE)                                                                                                                                                        \
        build/repositories/golem/                                                                                                                                                 \
        build/verifier/golem/scripts/                                                                                                                                             \
        build/verifier/golem/imgverifier-requirements.txt

    ... ale nie aż tyle, żeby odstępy były schowane poza krawędzią ekranu.
    Granica nie jest sztywno określona - po prostu w razie wątpliwości lepiej dać mniejszy odstęp niż większy.

  5. Zabronione:

    verifier!dependencies: \
        $(VERIFIER_SOURCE)                                          \
        build/repositories/golem/                     			    \
        build/verifier/golem/scripts/                               \
        build/verifier/golem/imgverifier-requirements.txt

    Wszystkie kontynuacje powinny być na tym samym poziomie. Powinny też być wyrównane wyłącznie za pomocą spacji.

  6. Zabronione:

    verifier!dependencies:      \
        build/repositories/dir1/\
        build/repositories/dir2/\
        build/repositories/dir3/

    \ po powoduje po prostu sklejenie ze sobą kolejnych linijek, bez żadnej spacji między nimi. Żeby uniknąć uzyskana jednego, długiego ciągu znaków, bez żadnych przerw musimy sami zadbać, aby dodać jakiś odstęp. Samo wcięcie już ten odstęp zapewnia, ale są sytuacje w których kolejne linijki nie mają wcięcia. Z tego powodu dobrze jest zadbać żeby mimo wszystko zawsze tuż przed znakiem \ była co najmniej jedna spacja. Poprawia to też trochę czytelność.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions