【问题标题】:Can a C program be executed, in the same makefile as it is being built?可以在与正在构建的同一 makefile 中执行 C 程序吗?
【发布时间】:2016-04-24 14:45:51
【问题描述】:

我有一个构建我的 .C 项目的生成文件,并生成一个可执行文件。我知道这可以从终端使用命令 ./(NAME) 运行。

我的问题是 - 是否可以在 makefile 中实际构建和运行,这样我就可以在终端中键入“make”,程序将被构建和运行,所有这些都来自这个文件& 命令? (无需手动运行可执行文件)。

谢谢:)

【问题讨论】:

  • 是的;这是可能的。
  • 是的,这是可能的。我不太了解makefile,但如果你的主要可执行文件名为test,你可以这样做:test: $(CC) test.cpp -o test && ./test

标签: c makefile


【解决方案1】:

不知道你的makefile是什么,但你可以这样做:

PROGARGS=

.PHONY:all run

all:prog

#...

run:all
    ./prog $(PROGARGS)

【讨论】:

    【解决方案2】:

    是的,可以。

    例如:

    TARGET=hoge
    CC=gcc
    
    .PHONY: compileandrun
    compileandrun: $(TARGET)
        ./$(TARGET)
    
    $(TARGET): $(TARGET).c
        $(CC) -o $(TARGET) $(TARGET).c
    

    如果你在可写的当前目录中有这个Makefile和源代码hoge.c,程序将被编译并使用make命令运行。

    【讨论】:

      【解决方案3】:

      其他答案都不错;但是,您可以使用这个其他变体(一种快速而肮脏的解决方案)。

      假设你的makefile 有这行来构建你的程序:

      NAME:
          gcc source.c -o NAME
      

      你可以直接在下面添加你的运行命令:

      NAME:
          gcc source.c -o NAME
          ./NAME
      

      这与&& 连接的作用相同:它运行第一个命令,如果成功,也运行第二个命令。

      【讨论】:

        【解决方案4】:

        只要你正确地排序你的makefile依赖,没有什么能阻止你从makefile运行你的C程序。也就是说,大多数人都希望 makefile 只是构建文件,而不是同时运行它。

        我建议只在命令行的一行中编写 make 命令和 run 命令。这样你只需要按一次回车,而不需要在 makefile 本身做任何花哨的事情。如果你的 shell 支持历史补全,下次你想再次构建和运行时,你只需要按“UP”和“ENTER”...

        make && ./NAME
        

        如果您真的想将所有内容都放在 makefile 中,我建议在您的 makefile 中创建一个单独的“运行”目标,以减少混淆的可能性,例如 jdarthenay 的 answer

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-22
          • 2020-09-11
          • 1970-01-01
          • 2013-10-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多