Missing erl_compile_flags.h File be Generated in Erlang?

The missing erl_compile_flags.h file error in an Erlang build occurs when the required header file is not generated or located correctly during the compilation process. This file is essential for building certain components of the Erlang emulator. To resolve the issue, you can clean the build environment, reconfigure the project, and ensure all necessary dependencies are installed.

Code with Original Error:

codeCC    obj/x86_64-pc-linux-gnu/opt/emu/erl_atom_table.o 
CC obj/x86_64-pc-linux-gnu/opt/emu/erl_bif_table.o
CC obj/x86_64-pc-linux-gnu/opt/emu/erl_bif_ddll.o
CC obj/x86_64-pc-linux-gnu/opt/emu/erl_bif_guard.o

make[4]: *** No rule to make target 'x86_64-pc-linux-gnu/opt/emu/erl_compile_flags.h', needed by 'obj/x86_64-pc-linux-gnu/opt/emu/erl_bif_info.o'. Stop.
make[4]: Leaving directory '/home/hridyanshthakur/langs/otp_src_25.1.2/erts/emulator'
make[3]: *** [/home/hridyanshthakur/langs/otp_src_25.1.2/make/run_make.mk:35: opt] Error 2
make[3]: Leaving directory '/home/hridyanshthakur/langs/otp_src_25.1.2/erts/emulator'
make[2]: *** [Makefile:45: opt] Error 2
make[2]: Leaving directory '/home/hridyanshthakur/langs/otp_src_25.1.2/erts'
make[1]: *** [Makefile:60: emu] Error 2
make[1]: Leaving directory '/home/hridyanshthakur/langs/otp_src_25.1.2/erts'
make: *** [Makefile:503: emulator] Error 2

Resolving the “No Rule to Make Target” Error in Erlang Compilation

When building Erlang from source, you might encounter the error:

codemake[4]: *** No rule to make target 'x86_64-pc-linux-gnu/opt/emu/erl_compile_flags.h', needed by 'obj/x86_64-pc-linux-gnu/opt/emu/erl_bif_info.o'. Stop.

This issue occurs when a required file, erl_compile_flags.h, cannot be found or generated during the build process. The file is necessary for compiling Erlang’s emulator and related components. To resolve this, follow these steps:

Clean the Build Environment

Old or corrupted build artifacts might be causing the error. Start by cleaning your build directory to remove these artifacts:

codemake clean

This will reset the build environment, ensuring that all files are recompiled from scratch.

Reconfigure the Project

After cleaning the build environment, it’s important to re-run the configuration script to ensure all dependencies are correctly set up:

code./configure

This will check for required libraries and set up the correct paths, including the creation of necessary files like erl_compile_flags.h.

Ensure Dependencies Are Installed

Make sure all the necessary build tools and dependencies are installed on your system. On Fedora, for example, you can install the required dependencies using:

codesudo dnf install gcc make ncurses-devel openssl-devel

On Debian-based systems like Ubuntu, you would use:

codesudo apt-get install build-essential libncurses5-dev libssl-dev

These dependencies are crucial for compiling Erlang, especially the emulator.

Check for Manual File Generation

In rare cases, the file erl_compile_flags.h might not be automatically generated. If this happens, manually creating or modifying the Makefile to reference the correct path may be required. Ensure the file exists in the expected directory (x86_64-pc-linux-gnu/opt/emu/), or generate it using:

codemake generate

Summary of Steps:

  • Clean the build environment with make clean.
  • Rerun ./configure to regenerate missing configuration.
  • Install necessary dependencies (GCC, Make, ncurses, etc.).
  • Regenerate Makefiles with make generate.
  • Rebuild the project with make.

By following these steps, the missing erl_compile_flags.h file should be generated correctly, allowing the Erlang build process to complete successfully.

Related blog posts