代码之家  ›  专栏  ›  技术社区  ›  J. Polfer

使用make有条件地设置调试宏

  •  1
  • J. Polfer  · 技术社区  · 15 年前

    DEBUG 定义后,调试printf-esque语句被编译到可执行文件中。

    为了指示是否要将这些代码编译到可执行文件中,我通常会将宏名与 -D 选项那么在 Makefile 我(目前)有:

    CXXFLAGS += -g -I ../ -Wall -Werror -DDEBUG
    

    但是,这不是很灵活;如果我不想在我的最终程序中使用调试语句,我必须修改Makefile以删除-DDEBUG。

    有没有办法修改 生成文件

    4 回复  |  直到 15 年前
        1
  •  4
  •   Loki Astari    15 年前

    您可以根据makefile中的目标有条件地定义其他变量。

    all:    target
    debug:  target
    
    debug:  DEBUG=PLOP
    
    target:
            @echo "HI $(DEBUG)"
    

    所以现在:

    > make
    HI
    >
    > make debug
    HI PLOP
    >
    
        2
  •  2
  •   DigitalRoss    15 年前

    附加另一个可以从CLI或环境中设置的变量

    $ cat Makefile
    CXXFLAGS += $(CLIFLAGS)
    
    maintarget:
        echo $(CXXFLAGS)
    $ make CLIFLAGS=-DDEBUG
    echo -DDEBUG
    -DDEBUG
    $ 
    
        4
  •  0
  •   J. Polfer    15 年前

    在冥想之后 make documentation ,我尝试将其放入我的Makefile中:

    ifneq(,$(findstring d,$(MAKEFLAGS)))
    CXXFLAGS += <... all normal options ...> -DDEBUG
    else
    CXXFLAGS += <... all normal options ...>
    endif
    

    make -d , -DDEBUG 一切就绪。

    现在,请注意,它是有效的,但我必须使用一个正常的标志,使其通常接受(您不能自行创建)。使用-d还会将(无害的)详细的make-level调试语句喷到屏幕上。我真的不想要;它掩盖了编译错误。但它确实有效。

    我希望有人能想出更好的主意。