Makedepend

makedepend is a Unix tool used to generate dependencies of C source files. A Microsoft Windows version was made available in 2002[1] and last updated in 2007 on UnxUtils.[2]

History

makedepend was developed as part of MIT's Project Athena. It was used extensively in building X11 and ancillary packages, but has since become superseded by the dependency generation facilities of various compilers, and is now used primarily as a worst-case fallback, e.g. by depcomp and GNU Automake.

Usage

makedepend is invoked with a list of sourcefiles:

makedepend [options] foo.c bar.c ...

However, it is more often invoked as a target from a makefile, typically under the depend target, such that make depend will invoke makedepend on all source files in the project. One such example target would be as follows:

SRCS = file1.c file2.c ...
CFLAGS = -O -DHACK -I../foobar -xyz
depend:
        makedepend -- $(CFLAGS) -- $(SRCS)

Purpose

When building C language projects, it is imperative for incremental compilation (and useful for clean compilation) to be able to track dependencies between compilation units. C expresses interfaces between compilation units via header files; as such, it is often necessary to rebuild a compilation unit when a header it includes is changed. make needs to be informed of these dependencies.

makedepend solves this problem by parsing the code of C source files to generate a list of dependencies (those header files included directly and indirectly). It is able to understand conditional compilation constructs so as to not generate excessive dependencies. It then appends rules expressing the dependencies to the Makefile.

Shortcomings

Much modern source code uses "conditional compilation" to control which part of the source code to be used based on C pre-processor symbols defined by the compiler. These symbols may state the compiler name or family, version number, operating system, and word size. Depending on these symbols, the included files may change. However, makedepend isn't itself a compiler and defines no such symbols, so the output may be incorrect. Further, some code will purposefully produce an explicit error if it cannot recognize any supported compiler, and thus will not be usable by makedepend at all.

Alternatives

Most modern compilers provide a flag (often -M) that uses the compiler's own source parser to generate a list of dependencies[citation needed]. This may be preferred to makedepend because it reduces the likelihood of the dependencies generated being at odds with the compiler's own behavior.

Since compilers accept different flags for dependency generation, and may behave differently in outputting dependency information, it is desirable to use a wrapper script that can invoke the compiler appropriately (and fall back to makedepend if necessary). One popular such wrapper script is depcomp, which is distributed with and used by GNU Automake.[3]

Solaris make includes support for dependency tracking that is activated by specifying the "special-function target" .KEEP_STATE.[4]

References

  1. ^ "Added makedepend from X11 distribution". Archived from the original on 2006-02-09. Retrieved 2013-09-17.
  2. ^ UnxUtils project hosted on SourceForge
  3. ^ Dependency Tracking in Automake, Automake Manual
  4. ^ Solaris make(1) Man-page


Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.