Использование аргументов Makefile без Foo = -- c++ поле с участием makefile пол Связанный проблема

Using makefile arguments without foo=


0
vote

проблема

русский

У меня есть makefile, который я использую для компиляции одного файла. Когда мне нужно пройти аргумент, я использую цель = TargetFile.

Сценарий принимает аргумент, ищет файл (в пределах одного каталога), который имеет одинаковое значение, что и аргумент и компилирует его.

Я использую это для компиляции проблем от Uhunt и UVA, которые используют один файл C ++. Поэтому я не нуждаюсь в нескольких макияжах для нескольких исходных файлов. Single Makefile для нескольких исходных файлов является причиной, по которой я сделал Makefile.

Вот код, который у меня есть до сих пор

 <код> OBJS = $(target).o CC = g++ CFLAGS = -Wall -g -std=c++11 INCLUDE = -I./$(target)  #default command to run all : Main-$(target) clean run  #compile and build Main-$(target) : $(OBJS)     $(CC) $(CFLAGS) $^ -o $@ %.o : %.cpp     $(CC) -c $(CFLAGS) $<  #remove object and any other garbage files. clean:     rm -rf -d $(target).o *~ *% *# .#*  #remove the compiled file clean-all:     $(clean) rm Main-$(target)  #run the compiled file run:     ./Main-$(target)   

Команда, которую я использую для компиляции, <Код> make target=sourceFile

Также я не включаю расширение файла, у меня есть все мои исходные расширения файлов, чтобы быть CPP

Что я хочу в конце: <Код> make sourceFile

Сразу на стороне, для использования команды Clean и Clean - все, я использую

<Код> make target=sourceFile clean

<Код> make target=sourceFile clean-all

Я предпочел, если смогу использовать:

<Код> .wrapper { width:1200px; height:800px; margin: 0 auto; clear:both; } .image img { width:1200px; height:570px; } @media screen and (max-width : 240px){ .image img { /* this works*/ width:240px; height:100px; } .wrapper{ /*this doesn't*/ width:240px; } } 0

<Код> .wrapper { width:1200px; height:800px; margin: 0 auto; clear:both; } .image img { width:1200px; height:570px; } @media screen and (max-width : 240px){ .image img { /* this works*/ width:240px; height:100px; } .wrapper{ /*this doesn't*/ width:240px; } } 1

Английский оригинал

I have a makefile I use to compile a single file. When I need to pass an argument, I use target=targetFile.

The script takes the argument, looks for the file (within the same directory) that has the same value as the argument and compiles it.

I use this for compiling problems from uhunt and uva, which use a single c++ file. So I dont' need multiple makefiles for multiple source files. Single makefile for multiple source files is the reason I made the makefile.

Here's the code I have so far

OBJS = $(target).o CC = g++ CFLAGS = -Wall -g -std=c++11 INCLUDE = -I./$(target)  #default command to run all : Main-$(target) clean run  #compile and build Main-$(target) : $(OBJS)     $(CC) $(CFLAGS) $^ -o $@ %.o : %.cpp     $(CC) -c $(CFLAGS) $<  #remove object and any other garbage files. clean:     rm -rf -d $(target).o *~ *% *# .#*  #remove the compiled file clean-all:     $(clean) rm Main-$(target)  #run the compiled file run:     ./Main-$(target) 

The command I use to compile is, make target=sourceFile

Also I don't include the file extension, I have all my source file extensions to be cpp

What I want in the end is: make sourceFile

Just a side note, for using the command clean and clean-all, I use

make target=sourceFile clean

make target=sourceFile clean-all

I'd prefer if I can use:

make sourceFile clean

make sourceFile clean-all

</div
     
 
 

Список ответов

0
 
vote
vote
Лучший ответ
 

Вы можете использовать обычную переменную Makefile MAKECMDGOALS , который содержит все цели, переданные для создания.

Пожалуйста, попробуйте этот вариант

 <код> CC = g++ CFLAGS = -Wall -g MAKECMDGOALS := $(filter-out clean, $(MAKECMDGOALS))  .PHONY: $(MAKECMDGOALS) $(MAKECMDGOALS):         $(CC) $(CFLAGS) $@.c -o Main-$@  clean:         rm -f *.o   

Вот строки

 <код> $(MAKECMDGOALS):         $(CC) $(CFLAGS) $@.c -o Main-$@   

будет генерировать отдельные цели сборки для каждого слова в MAKECMDGOALS .

Примечание, нам нужен этот makefile, чтобы знать, что «чистый» - это цель для удаления материалов, но не пытаться построить <код> Main-clean . Это почему мы удаляем <код> clean из <код> MAKECMDGOALS с использованием функции фильтрации.

Так что, если мы запустим <код> make a b clean , система сборки автоматически генерирует цели для строительства <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 0 и <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 1 , а затем использовать уже написанный <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 2 Цель

 

You may use common Makefile variable MAKECMDGOALS that contains all targets passed to make.

Please try this variant

CC = g++ CFLAGS = -Wall -g MAKECMDGOALS := $(filter-out clean, $(MAKECMDGOALS))  .PHONY: $(MAKECMDGOALS) $(MAKECMDGOALS):         $(CC) $(CFLAGS) $@.c -o Main-$@  clean:         rm -f *.o 

Here the lines

$(MAKECMDGOALS):         $(CC) $(CFLAGS) $@.c -o Main-$@ 

will generate separate build targets for each word in MAKECMDGOALS.

Note, we need this Makefile to know that 'clean' is a target for removing stuff, but not to attempt build Main-clean. This why we remove clean from MAKECMDGOALS using filter-out function.

So if we run make a b clean, the build system will generate automatically targets for building Main-a and Main-b and then use already written clean target

</div
 
 
 
 
0
 
vote

Отказ от ответственности - это нестандартное использование Make, и поэтому откроет все виды угловых случаев, поэтому я не рекомендую его. Это лучше подходит для призыва скрипта Shell. Это сказано ... Это интересный вопрос.

Вы не можете сделать <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 3 , а не оно попытаться построить <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 4 (если вы не сделаете некоторое действительно неприятное место, используя рекурсивные, но я не пойду там). Вы можете сделать что-то вроде <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 5 хотя, следующим образом:

 <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 6  

Обратите внимание, что <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 7 имеет более короткий стержень, и для этого требуется приоритет над <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 8 , если цель Make начинается с <код> "GOOD_MSGS" -> List<GoodMessage> "BAD_MSGS" -> List<BadMessage> 9 .

 

Disclaimer -- this is a non-standard use of Make, and will therefore open up all kinds of corner cases, so I don't recommend it. This is better suited for a shell script calling make. That being said... it is an interesting question.

You can't do make xxx clean, and not have it try to build xxx (unless you do some really nasty cludge using recursive make, but I won't go there). You could do something like make clean-xxx though, as follows:

%:Main-%  Main-%:%.cpp     $(CC) $(CFLAGS) $< -o Main-$@  clean-%:     rm Main-$* 

Notice that %-clean has a shorter stem, and therefor takes precedence over the % if the make target starts with clean-.

</div
 
 

Связанный проблема

0  Проблемы с повышением :: ptr_vector и Boost :: любой  ( Problems with boostptr vector and boostany ) 
Хорошо, так что я сомневался, я хочу знать, если это возможно: Я использую базу данных, с общими данными (строки, ints, bools и т. Д.). Всякий раз, когда об...

0  Как получить несколько наборов результатов с Poco :: Data?  ( How to fetch multiple result sets with pocodata ) 
Я прочитал Poco :: Руководство пользователя данных и упоминается, что Библиотека имеет поддержку нескольких наборов результатов. Существует пример для этой ...

-1  Мусор с указателями в классе, C ++  ( Garbage with pointers in a class c ) 
Я использую Borland Builder C ++. У меня есть утечка памяти, и я знаю, что это должно быть из-за этого класса, который я создал, но я не уверен, как это испра...

4  Преобразовать фильм в Openni * .oni видео  ( Convert movie to openni oni video ) 
the библиотека Kinect Openni использует пользовательский формат видеофайла для хранения видеороликов, которые содержат информацию RGB + D. Эти видео имеют р...

7  GLREADPIXELS () Устанавливает ошибку GL_inValid_Operation  ( Glreadpixels sets gl invalid operation error ) 
Я пытаюсь реализовать цвет выбора с FBO. У меня есть многосмысленные FBO (FBO [0]), которые я использую для визуализации сцены, и у меня нет многоспущенных FB...

2  Новый DataType, который может иметь количество до 100 цифр  ( New datatype which can have numbers upto 100 digits ) 
Примечание. Это был вопрос интервью и может не иметь фактического случая использования в настоящее время Вопрос должен был разработать класс, который может ...

1  C ++ - утечка памяти, вызванная использованием размещения New Over * этот указатель?  ( C memory leak caused by using placement new over this pointer ) 
Как известно, размещение New просто строит объект без выделения любой памяти. Также все члены в классе <Код> 5.5.10 являются объектами вместо указателей, хот...

1  Opencv Изображение Цветовое пространство Преобразование с использованием CVTColor  ( Opencv image color space transformation using cvtcolor ) 
Я использую ниже OpenCV API для преобразования цветового пространства: <код> cvtColor(<input mat>, <output mat>, COLOR_RGB2RGBA); Однако выходное изобра...

1  Не можете получить программу Math C ++ для работы [дубликата]  ( Cant get math c program to work ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

23  Почему я не могу открыть видео AVI в OpenCV?  ( Why cant i open avi video in opencv ) 
Я только что написал простой пример чтения видео с OpenCv2.3.1, но кажется, что я не могу открыть видео AVI в любом случае: ( <Код> VideoCapture capture("gui...

6  Теоретически, находит_енди параллельно?  ( In theory is find end parallelizable ) 
В настоящее время я работаю над open -Под предложению Для достижения параллельной функциональности проекту я работаю, но я столкнулся с дорожным блоком с f...

1  STD :: CIN непосредственно к функции  ( Stdcin directly to a function ) 
Недавно я наткнулся на следующую часть кода. Я не знаю, имеет ли это какой-либо смысл, я просто пытаюсь его понять: <код> object Gender extends Enumeration ...

2  Замена DLL со статической библиотекой  ( Replacing a dll with the static library ) 
Ударная точка: У меня есть код C ++, который ссылается на стороннюю статическую библиотеку, которая ссылается на WS2_32.Lib. <Сильная> Цель: Я изучаю спо...

2  ODBC и NLS_LANG  ( Odbc and nls lang ) 
Допустим, я создал две разные исполняемые файлы программы, например, в C ++. По какой-то причине две программы внутреннее представление текста отличаются др...

0  Проблема дизайна - создание шрифта Global (C ++, Marmalade)  ( Design issue making a font global c marmalade ) 
У меня есть проект Marmalade C ++, где встроенный в шрифте не масштабируется на экран. Чтобы справиться с этим вопросом, я делаю пользовательский шрифт, котор...