Ошибочное равенство условий Makefile

#if-statement #makefile

#оператор if #makefile

Вопрос:

Итак, я вроде как новичок в makefiles, но у меня есть это правило в моем:

 $(rc)/%.class: $(r)/%.java
    echo $(strip $(findstring $*,"Robot RoboController"))
ifneq (,$(strip $(findstring $*,"Robot RoboController")))
    echo "Robot or RoboController"
else
    echo "other";
endif
  

Моя цель состоит в том, что если сопоставляемый текст является Robot или RoboController, то он компилируется одним способом, в противном случае он компилируется другим способом, к сожалению, когда я запускаю maks, я получаю следующий вывод:

 $ make Classes/RobotSuite/robot/Robot.class
    echo Robot
    Robot
    echo "other";   
    other
$ make Classes/RobotSuite/robot/RoboComm.class
    echo 

    echo "other";   
    other
  

Похоже, что независимо от того, что я ввожу в ifneq , оно ошибочно оценит его как равное нулевой строке. Кто-нибудь может объяснить, почему?

Я использую GNU Make v3.81, созданный для i686-pc-linux-gnu.

Комментарии:

1. Почему это помечено как «java»?

2. Упс. Неудачный выбор. На самом деле не обращал внимания.

3. Эй, есть ли какой-нибудь способ поднять этот поток, не будучи придурком по этому поводу?

4. Вы можете удалить вопрос и отправить его повторно. Это могло бы помочь, если бы вы объяснили, какую систему make вы используете.

5. Я могу опубликовать достойный ответ, если вы хотите. Почему вы хотите «запустить этот поток» (и что вы подразумеваете под этой фразой)?

Ответ №1:

Если вы используете GNU Make, не используйте ifneq для решения этой проблемы, используйте целевые значения конкретных переменных.