epstopdf for multiple files using makefile


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers epstopdf for multiple files using makefile
# 1  
Old 03-09-2010
Bug epstopdf for multiple files using makefile

Greetings!

I'm fairly new to the unix world and I hope someone here can help me with my question. I'm using a Makefile to run a few programs and the final output is several .eps files. However I need them to be .pdf files, so I want to use epstopdf to convert the files.

Since I'm already using a Makefile I'd like to just add an extra line to the file, so I tried:
Code:
convert:
  epstopdf `find -name '*eps'`

however this doesn't work, because epstopdf has too many inputfiles! Any help in how to change this such that epstopdf is called for all the .eps files separately is much appreciated. I still want to be able to just add a (few) lines to my Makefile though.

Cheers!

wwoord

---------- Post updated at 12:40 PM ---------- Previous update was at 12:30 PM ----------

Hi all,

problem solved already, by looking in to other threads on this forum with similar problems. I changed the code to:
Code:
convert:
  ls *.eps | awk '{system("epstopdf "$0 )}'

now epstopdf is called for each .eps file one at a time.

Cheers!

---------- Post updated at 01:05 PM ---------- Previous update was at 12:40 PM ----------

Hi all,

just a quick update, the command I posted works fine:
Code:
ls *.eps | awk '{system("epstopdf "$0 )}'

however in a makefile $ is interpreted as a user variable, so this doesn't work:
Code:
convert: 
  ls *.eps | awk '{system("epstopdf "$0 )}'

adding an extra $ fixes this and now it works fine if called from a makefile!
Code:
convert: 
  ls *.eps | awk '{system("epstopdf "$$0 )}'

# 2  
Old 03-09-2010
You can also try:
Code:
ls *eps | xargs epstopdf

# 3  
Old 03-09-2010
Code:
for f in *eps; do
  epstopdf "$f"
done

With xargs the -n1 option and argument should be used in this case.
# 4  
Old 03-09-2010
Quote:
Originally Posted by Franklin52
You can also try:
Code:
ls *eps | xargs epstopdf

Thanks for the suggestion, it worked after I changed it a little bit to:
Code:
ls *eps | xargs -n1 epstopdf

looks a lot better than my my solution for sure!

Cheers

---------- Post updated at 01:54 PM ---------- Previous update was at 01:48 PM ----------

Quote:
Originally Posted by radoulov
Code:
for f in *eps; do
  epstopdf "$f"
done

With xargs the -n1 option and argument should be used in this case.
You also thanks for your solution, I just found out I should use the -n1 option with xargs. Your script should also work, but I can't put it in my makefile so then I should add an other file to my directory containing the script and then call it from the makefile. I was trying to avoid creating extra files.

Cheers
# 5  
Old 03-09-2010
Quote:
Originally Posted by wwoord
[...] Your script should also work, but I can't put it in my makefile so then I should add an other file to my directory containing the script and then call it from the makefile. I was trying to avoid creating extra files.
I believe that you could also use for expansion (a for loop) in the Makefile (don't ask me how, I never wrote a Makefile Smilie).

P.S. Note that the above pipeline: ls ... | xargs .., will fail for file names containing special (for the current shell) characters.
# 6  
Old 03-09-2010
I'l look in to the possibility of using a for expansion in my Makefile, always nice to be able to solve thinks in more then on way Smilie

Thanks for pointing out the special characters, I didn't run in to that problem, but this is an other good reason to avoid special characters in filenames.
# 7  
Old 03-09-2010
If you have filenames with spaces you could do something like:
Code:
ls *.eps |xargs -I{} epstopdf {}

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Makefile with multiple executables

CROSS_COMPILE?= LIBDIR_APP_LOADER?=../../../../app_loader/lib INCDIR_APP_LOADER?=../../../../app_loader/include BINDIR?=../../bin CFLAGS+= -Wall -I$(INCDIR_APP_LOADER) -D__DEBUG -O2 -mtune=cortex-a8 -march=armv7-a -std=gnu99 LDFLAGS+=-L$(LIBDIR_APP_LOADER) -lprussdrv -lpthread OBJDIR=obj... (1 Reply)
Discussion started by: bpetersen
1 Replies

2. Shell Programming and Scripting

Help: Makefile with multiple executables

I am trying to create executables for the following files Currently, I am making 9 different directories for for each. I would like to make 1 directory but everytime I try it does not work. CROSS_COMPILE?= # CROSS_COMPILE used to = arm-arago-linux-gnueabi... (1 Reply)
Discussion started by: bpetersen
1 Replies

3. Programming

Makefile for building multiple programs

I have the following part of a makefile and want to simplify it using rules rather than having to code the same two blocks when I need ti build another program. An having difficulty doing it all: 1dvel2 1dvel 2dvel ... (8 Replies)
Discussion started by: kristinu
8 Replies

4. 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

5. UNIX for Advanced & Expert Users

makefile head-scratcher: multiple targets in one go

Hi! I've got a build process where scripts create multiple targets from their sources. But here I'm running into a conceptual problem of GNU make: If one has multiple targets in a dependency, make applies the rules once for every target that is out of sync - which is correct for normal... (3 Replies)
Discussion started by: treczoks
3 Replies

6. UNIX for Dummies Questions & Answers

epstopdf etc. commands

guys I would like to have more commands (as epstopdf) as this e.g. jpgtogif etc. how can I install them? where I need to have a look on it... I use MacOSX (1 Reply)
Discussion started by: c_lady
1 Replies

7. Shell Programming and Scripting

Multiple script lines into a Makefile

Hi All I am creating a makefile and I want to do a clean section. In the clean section I would like to check if the file exists and then delete it. I always have an error 'unexpected end of file' What's wrong in it? Thanks msntn firstCpp: first.cpp g++ -o first first.cpp clean: ... (1 Reply)
Discussion started by: manustone
1 Replies

8. Programming

Makefile: multiple target variable substitution

Greetings! Basically, I would like to properly handle this with gnu make: alltools: my_tool mysecond_tool mythird_tool etc_tool %_tool: dir1/%_tool.vf dir2/%_tool/subdir2/%_tool.ver <tab>@echo done %.vf: <tab>RUN_VF $* %.ver: <tab>RUN_VER $* So, if I were to do something like:... (0 Replies)
Discussion started by: Harlinator
0 Replies

9. 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

10. Solaris

Makefile:57: *** multiple target patterns. Stop.

Hi, I am getting the following error while building on Solaris 64 , while I am trying to build. Error Snippet :- ---------------------- Makefile:57: *** multiple target patterns. Stop. make: Leaving directory `/work1/patch/vds6053sun64o/vobs/jvi' make: *** Error 2 make: Leaving directory... (0 Replies)
Discussion started by: nileshborate
0 Replies
Login or Register to Ask a Question