VisualGDB Makefiles

时间:2024-08-19 17:05:08

以下内容是VisualGDB官网对VisualGDB编译时获取相关编译信息的说明:

When you create a new project using VisualGDB, it will generate a Makefile for you. More specifically, it will generate 2 files: Makefile and flags.mak.

Overview

  • When you add new files to the project, VisualGDB will update the Makefile automatically
  • If you want to change the GCC/LD flags, edit the flags.mak file
  • If you want to add more configurations or targets, modify the Makefile.
  • If you don't want VisualGDB to touch the Makefile, remove the following line:
    #VisualGDB: AutoSourceFiles

Detailed description

The Makefile contains basic targets (such as all and clean) and generally has the following structure:

#VisualGDB: AutoSourceFiles
SOURCEFILES := file1.cpp file2.cpp
TARGETNAME := MyExeName
include flags.mak

ifeq ($(CONFIG),DEBUG)
    ...
endif

...

$(BINARYDIR)/%.o : %.cpp $(BINARYDIR)
    $(CXX) $(CFLAGS) -c $< -o $@ -MD -MF $(@:.o=.dep)

$(BINARYDIR)/%.o : %.c $(BINARYDIR)
    $(CC) $(CXXFLAGS) -c $< -o $@ -MD -MF $(@:.o=.dep)

The SOURCEFILES line lists all source files used in the project. VisualGDB will automatically update this line when you add new files to the project. The "%.cpp" and "%.c" lines define generic rules to build .o files from the C/C++ source files.

The flags.mak defines GCC flags (such as optimization level) that are used by Makefile. Its typical structure looks the following way:

CC := /usr/bin/gcc
CXX := /usr/bin/g++
LD := /usr/bin/g++

...

CFLAGS := -ggdb -ffunction-sections
DEBUG_CFLAGS := -O0
RELEASE_CFLAGS := -O3

The following table summarizes all variables defined in flags.mak:

Variable Meaning Example
CC Location of the GCC compiler c:/gcc/gcc.exe
CXX Location of the C++ compiler c:/gcc/g++.exe
LD Location of the linker (typically GCC/G++ is used for linking) c:/gcc/g++.exe
COMMON_MACROS Preprocessor definitions to be defined in all configurations. _WIN32 _CONSOLE
DEBUG_MACROS Preprocessor definitions to be defined in DEBUG configuration only _DEBUG DEBUG
RELEASE_MACROS Preprocessor definitions to be defined in RELEASE configuration only _NDEBUG _RELEASE
MCUFLAGS Additional flags specifying microcontroller type -mmcu=msp430f2013
INCLUDE_DIRS Additional include directories relative to the project location ../lib1 ../lib2
LIBRARY_DIRS Additional library directories ../lib1/bin ../lib2/bin
LIBRARY_NAMES Additional libraries to link with (no "lib" prefix) 1 2
CFLAGS Additional GCC flags for all configurations -ggdb -ffunction-sections
DEBUG_CFLAGS Additional GCC flags for DEBUG configuration -O0
RELEASE_CFLAGS Additional GCC flags for RELEASE configuration -O3
CXXFLAGS Additional C++ flags for all configurations -fno-exceptions
DEBUG_CXXFLAGS Additional C++ flags for DEBUG configuration  
RELEASE_CXXFLAGS Additional C++ flags for RELEASE configuration  
MACOS_FRAMEWORKS Additional framework names (MacOS only) iokit
LDFLAGS Additional flags to the linker (with -Wl, prefix when GCC is used for linking)  
DEBUG_LDFLAGS Additional linker flags for DEBUG configuration  
RELEASE_LDFLAGS Additional linker flags for RELEASE configuration  
START_GROUP Either an empty string, or "-Wl,--start-group"  
END_GROUP Either an empty string, or "-Wl,--end-group"  

The START_GROUP/END_GROUP flags surround the library/object file list and allow specifying them in an arbitrary order (otherwise the object file list has to be sorted manually). You can set those variables to empty strings if your linker (e.g. MacOS linker) does not require those flags.

对上面的内容可以理解为为:Debug模式下,完整的make执行需要Makefile和debug.mak两个文件;Release模式下则需要Makefile和release.mak两个文件

如果需要导出VisualGDB的Makefile文件,只需要合并相应的两个文件即可。将.mak文件的内容放到Makefile文件内容的前面,所得到的Makefile文件即可进行编译。