2016-02-26 2 views
-1

Edit:аргументов командной строки с Makefile

Это отличается от другого вопроса, поскольку переменные, которые я ставлю в командной строке UNIX будет «p2 -s input.txt», где мой файл main.c будет манипулировать ими.

Так обычно при работе с аргументами командной строки, мой код будет что-то вроде:

int main(int argc, char argv[]) 
{ 
    printf("%d", argc); 
    return 0; 
} 

Как бы я сделать это с помощью Makefile?

+0

Что вы хотели бы сделать с вашим файлом makefile? –

+0

Аргументы 'make' используются для определения целей для построения. – Barmar

+0

Возможный дубликат [Передача дополнительных переменных из командной строки для создания] (http://stackoverflow.com/questions/2826029/passing-additional-variables-from-command-line-to-make) –

ответ

2

GNU make не C.
Передача аргументов не может быть выполнена аналогичным образом.

Если вы хотите предоставить настраиваемые аргументы в свой файл,
, вы можете подумать об этом путем назначения переменных.

, например, принять следующие Makefile:

all: 
    @echo $(FOO) 

Он может быть вызван из командной строки, как это:

make FOO="test" 

и он будет печатать test.


Другие варианты для рассмотрения:

  • установки переменных окружения перед вызовом сделать
  • опираясь на различных целей, указанных внутри Makefile
+0

Я назвал программу p2. Когда я хочу запустить программу, я бы поставил «p2 Hi», и он должен печатать 2. Я хочу передать аргументы «p2» и «Hi» в мою программу main.c – John

+0

@John Возможно, я неправильно понял. Итак, вы хотите, чтобы ваш make-файл принимал аргументы, и затем эти аргументы передавались в вашу программу на C? Ничто не мешает вам пересылать эти аргументы в теле правила «make». Вместо приведенной выше эхо-команды вы можете вызвать свою собственную программу. –

+0

Извините, это сложно объяснить словами lol. Нужно ли мне менять параметры для моего main.c? Я пытался проверить, был ли -s argv [1] (каким он должен быть), но могу ли я попробовать strcmp или ==, он все равно возвращает, что флага там нет. Более запутанная часть состоит в том, что я также включил тестовый запрос печати - printf («% s», argv [1]); и он напечатал -s – John

0

Используйте Makefile так:

COMMAND = echo 'You did not specify make COMMAND="cmd 2 run" on the command line' 

all: 
    ${COMMAND} 

Теперь, когда вы запустите make COMMAND="p2 Hi", вы получите эту команду и соответствующий выход. Если вы забыли указать COMMAND="something or another", тогда вы получите соответствующий бегун памяти.