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.