Sponsored Content
Full Discussion: makefile ifeq not working
Top Forums Programming makefile ifeq not working Post 302350084 by Corona688 on Wednesday 2nd of September 2009 06:35:29 PM
Old 09-02-2009
Makefiles do not work that way, they are not shell scripts. They are a list of what files you need to build what files. if you tell it b comes from a, c comes from b, and d comes from c, give it a, then ask for d, it will execute the given instructions in the order needed to produce the target. You can specify them in any order.

Targets you build do not affect variables. These control structures you're trying are more like #ifdef's in C, if you know how those work.

A statement like
Code:
a:b
        echo "creating file a"
        cp b a

...specifies files and only files. It specifies that to create file a, you must have file b. You cannot use it to assign a variable -- and that's probably a good thing since that would botch horribly if make tried to do things in parallel. The lines below it, which must begin in tabs, are shell statements that specify how to create file a. They are executed individually and in order when make tries to build target 'a'.

Remember, you can specify these relationships in any order, and the makefile will decide what statements it needs to do in order to create a from b, c from a, d from c, and so forth. This means it must read and parse the entire file before doing anything, it is not a shell script. It won't even have started building by the time it reaches @echo "regress == YES" because it parses the entire file before deciding what targets to build in what order, and statements in them cannot affect the make environment anyway since they are executed in a shell.

Last edited by Corona688; 09-02-2009 at 07:43 PM..
 

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

Makefile problem - How to run module load in a Makefile

Hi, I'm trying to run the module load command in a Makefile and i'm getting the following error: make: module: command not found Why is this? Is there any way to run this command in a Makefile? NOTE: command - module load msjava/sunjdk/1.5.0 works fine outside of the Makefile (2 Replies)
Discussion started by: hernandinho
2 Replies

2. UNIX for Advanced & Expert Users

Makefile executing another Makefile first?

I have 2 libraries in 2 different directories that I build with Makefiles. library B depends on library A. If I modify a .cpp file in library A and run lib B's Makefile can I have B's makefile to automatically rebuild library A? I am now rebuilding A, followed by B... but I'd like B to... (0 Replies)
Discussion started by: wwuster
0 Replies

3. Homework & Coursework Questions

Help with Simple Multi-Level Makefile (Extremely New at Makefile)

Use and complete the template provided. The entire template must be completed. If you don't, your post may be deleted! 1. The problem statement, all variables and given/known data: Basically, the prompt is make a makefile with various sub makefiles in their respective subdirectories. All code... (1 Reply)
Discussion started by: Tatl
1 Replies

4. UNIX for Advanced & Expert Users

AND && in ifeq in makefile

Hi, Can anybody help mw how to use 2 conditinal directives in makefile (with AND=&&), so far none of my tries succedded. Getting this warning like below. I thought that C's && will work, but alas, played with (), spaces and etc.. and I have only GNU Make 3.80 ifeq ($(VAR1),15) &&... (4 Replies)
Discussion started by: trento17
4 Replies

5. Shell Programming and Scripting

Script not working in cron but working fine manually

Help. My script is working fine when executed manually but the cron seems not to catch up the command when registered. The script is as follow: #!/bin/sh for file in file_1.txt file_2.txt file_3.txt do awk '{ print "0" }' $file > tmp.tmp mv tmp.tmp $file done And the cron... (2 Replies)
Discussion started by: jasperux
2 Replies

6. Shell Programming and Scripting

Source command returns error when it strikes conditional statement "ifeq"

Hello All, I am running source command on my project configuration file app.cfg which has conditional statements with make file systax E.g ifeq ($(APP_CMP_DIR),trunk). When I source this file it throws error: syntax error near unexpected token... (1 Reply)
Discussion started by: anand.shah
1 Replies

7. Red Hat

Nslookup working but ping not working at windows client

Hi Team we have created a DNS server at RHEL6.2 environment in 10.20.203.x/24 network. Everything is going well on linux client as nslookup, ping by host etc in entire subnet. We are getting problem in windows client as nslookup working as well but not ping. all the firewall is disabled and... (5 Replies)
Discussion started by: boby.kumar
5 Replies

8. Shell Programming and Scripting

Automating pbrun /bin/su not working, whenever manually it is working using putty

I am trying to automate a script where I need to use pbrun /bin/su but for some reason it is not passing thru the pbrun as my code below. . ~/.bash_profile pbrun /bin/su - content c h 1 hpsvn up file path I am executing this from an external .sh file that is pointing to this scripts file... (14 Replies)
Discussion started by: jorgejac
14 Replies

9. Shell Programming and Scripting

Working web service call not working with curl

Hello, Newbie here, I have a perfectly well working web service call I can issue from chrome (PC Windows 10) and get the results I want (a dimmer being turned on in Fibaro Home Center 2 at level 40) I am not allowed to post urls but the below works with http and :// and... (3 Replies)
Discussion started by: abigbear
3 Replies

10. Shell Programming and Scripting

Disk Space Utilization in HTML format working in one environment and not working on the other

Hi Team, I have written the shell script which returns the result of the disk space filesystems which has crossed the threshold limit in HTML Format. Below mentioned is the script which worked perfectly on QA system. df -h | awk -v host=`hostname` ' BEGIN { print "<table border="4"... (13 Replies)
Discussion started by: Harihsun
13 Replies
DPATCH.MAKE(7)							      dpatch							    DPATCH.MAKE(7)

NAME
dpatch.make - simplistic wrapper around dpatch(1) for make(1). SYNOPSIS
include /usr/share/dpatch/dpatch.make DESCRIPTION
For backwards compatibility and ease of use, dpatch.make is provided along with dpatch(1). Its purpose is to implement generic patch and unpatch rules that can be reused in debian/rules scripts. WARNING
dpatch is deprecated, please switch to the `3.0 (quilt)' Debian source package format instead. See http://wiki.debian.org/Projects/Deb- Src3.0#FAQ for a short guide on how to do it. USAGE
Using dpatch.make is rather straightforward: one has to include the file in debian/rules, change the appropriate targets to depend on patch and unpatch, and that is all it takes. Figuring out what the appropriate target is, requires some thought. Generally, one has a build target, or config.status, or configure (or any of these with a -stamp suffix). Most of the time these are called first during the build, so one of these (the one that exists, and is not depended upon by another one) has to be modified to depend on the patch target in dpatch.make. Doing the same for the clean target is easier. One only has to rename the old rule to, say, clean-patched, then make a new one that has clean-patched and unpatch in its list of prerequisites. CUSTOMISATION
There are a few variables which are used by dpatch.make, which can be set before including it, in order to change the systems behaviour a little. These variables are: DEB_SOURCE_PACKAGE This is the name of the source package, used when creating the stamp file. By default, it is empty. DPATCH_STAMPDIR This is the directory where stamp files will be put. Default is debian/patched. DPATCH_STAMPFN The name of the stamp file, which contains the patch descriptions and other possible meta-data. Default value is patch-stamp. DPATCH_PREDEPS A list of make targets to call before applying the dpatch. DPATCH_WORKDIR The target directory to apply patches to. By default, it is the current directory. PATCHLIST The list of patches to apply. This is an alternative to debian/patches/00list - that is, if this variable is not empty, the contents of 00list will be ignored, and this variable will be used instead. EXAMPLE
include /usr/share/dpatch/dpatch.make build: build-stamp build-stamp: patch-stamp ${MAKE} touch build-stamp clean: clean1 unpatch clean1: ${MAKE} clean rm -rf debian/files debian/substvars debian/imaginary-package .PHONY: patch unpatch ... . . . SIDE EFFECTS
Using dpatch.make instead of calling dpatch directly has one side effect: it will create a file called patch-stamp containing some meta-information extracted from the scriptlets. Depending on a phony patch target directly from build target may cause build target to be reevaluated even when there is no change to be done. Instead, try making build-stamp depend on patch-stamp as specified in this example. AUTHOR
Originally by Gergely Nagy. Modified by Junichi Uekawa. SEE ALSO
dpatch(1), dpatch(7), dpatch-edit-patch(1), dpatch-list-patch(1), dpatch-convert-diffgz(1) DPATCH 2 Dec 13 2011 DPATCH.MAKE(7)
All times are GMT -4. The time now is 11:50 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy