Use 'subst' in a multiline makefile bash script?

I read this question: Makefile: $subst in dependency list, but I still can't make my shell script work correctly.

I have a makefile with a line with the contents:

#@public_detailed@|test_create|Syntax: commoncmdsyntax test_create test_name=<test-name>

A target runs a multiline bash script, where the commoncmdsyntax must be replaced by a string containing words and spaces.

In the script, I use cut to assign to a variable desc the following string:

Syntax: commoncmdsyntax test_create test_name=<test-name>

The problem is that commoncmdsyntax is not replaced by new text here:

$(subst commoncmdsyntax,new text,$$desc)

I also tried to replace it by a single word, like XX, but it also does not work.

6

1 Answer

The subst function (as in $(subst commoncmdsyntax,new text,$$desc)) is a Make function, so Make will perform the substitution before running any rule and therefore before your script assigns a value to desc. So even if secondary expansion worked the way you seem to think it will, this approach would still fail.

If you want to perform a substitution within something made by a shell script (in a recipe), the sensible way is to do so within the recipe:

echo $dest | sed 's/commoncmdsyntax/new text/'

We can give you a more detailed solution if you give us a minimal complete example of the problem.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like