如果条件在Makefile中的目标内

nav*_*een 7 makefile

我想做这样的事情,我想在文件发生变化的情况下运行svn提交.该文件的时间戳始终更改.因此,如果超过时间戳更改,我想提交文件.

makefile将有类似的东西.但If条件不能正常工作.即使不满意,它也会被执行.有人可以帮我解决问题,如果在这里.

    UPDATE_STATE_FILE :
        $(eval NO_LINES_CHANGES_IN_STATE = $(shell svn di STATE/build.state --diff-cmd=diff -x --normal | grep "^[<>]" | wc -l))
        @echo $(NO_LINES_CHANGES_IN_STATE)
    ifneq ($(strip $(NO_LINES_CHANGES_IN_STATE)), 2)
    ifneq ($(strip $(NO_LINES_CHANGES_IN_STATE)), 0)
        @echo $(NO_LINES_CHANGES_IN_STATE)
        $(SVN) commit;
        $(SVN) update;
    endif
    endif
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 15

您不能在命令规则中混合使用条件.使条件类似于C或C++中的预处理器语句; 在执行任何处理(如运行规则)之前,在读入文件时处理它们.

如果你想在规则中使用条件,你必须使用shell条件来编写规则,而不是使条件:

UPDATE_STATE_FILE :
        @NO_LINES_CHANGES_IN_STATE=`svn di STATE/build.state --diff-cmd=diff -x --normal | grep "^[<>]" | wc -l`; \
        echo $$NO_LINES_CHANGES_IN_STATE; \
        if [ $$NO_LINES_CHANGES_IN_STATE -ne 2 ] && [ $$NO_LINES_CHANGES_IN_STATE -ne 0 ]; then \
            echo $$NO_LINES_CHANGES_IN_STATE; \
            $(SVN) commit; \
            $(SVN) update; \
        fi
Run Code Online (Sandbox Code Playgroud)