使用make命令获取字符串输入以用作C程序中的主要参数

时间:2017-03-13 11:32:17

标签: c makefile

我在使用makefile命令获取用户输入时遇到问题。我需要的是询问用户TXT文件的名称(位于./data/),然后使用该文件的路径作为我的主C程序的参数。

制作代码:

launch-app-conway: app-conway
  @read -p "Enter file name: " FILENAME
  FILEPATH = "./data/"
  FILEPATH += FILENAME
  ./main-program FILEPATH

输出" FILEPATH:找不到命令"。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

这里有很多问题。首先,你根本不使用变量。值FILENAME只是一个文本字符串,一个文字FILENAME。它不是变量引用。

其次,您似乎正在尝试在makefile配方中使用make变量赋值等。 makefile配方(由TAB字符缩进的部分)传递给shell,你必须使用shell语法(例如shell中没有+=赋值)。

第三,makefile配方中的每个逻辑行都被传递给另一个shell,shell中的变量赋值在shell退出时会丢失,所以即使变量引用是正确的并且你使用正确的shell语法来构造变量FILEPATH,它将为空,因为它是在不同的shell中构造的。

你可以用这个做你想做的事:

launch-app-conway: app-conway
        @read -p "Enter file name: " FILENAME; \
        ./main-program "./data/$$FILENAME"

但请注意,如果您尝试使用-j运行此makefile,则可能无法正常运行,因为您的配方可能无法访问stdin。

答案 1 :(得分:1)

食谱的每一行都会产生一个新的shell。因此,如果在第1行中设置变量,那么在第line2行之前将忘记该变量。您可以使用\来连接线条。同样,您似乎缺少美元符号(不确定您使用的是哪个外壳),但通常情况下,重新调整管中的单个美元符号表示生成变量,以及double用于shell变量。

你想要的是:

launch-app-conway: app-conway
    @read -p "Enter file name: " FILENAME; \
    FILEPATH="./data/$$FILENAME"; \
    echo $$FILEPATH

(注意:如果你想从这里剪切和粘贴,请记住SI将标签转换为空格,而Makefile需要空格。)