This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Using make to copy a set of files when directory is referenced.

While I using Eclipse, rarely I needed to use the MAKE or when I needed the knowledge he had was enough.

Now I need to do some actions, such as copying files from one directory to another whenever the presence of one or another variable and when the directory is referenced by another rule, clearing the destination before removing the files if another architecture.

Having the presence of a particular variable, such as `__AVR_ATmega328P`, `__AVR_ATmega2560` or `__ARM_xxxx` he must copy some files from `/users/extra/lib/atmega328P` or `/usr/extra/lib/atmega2560`, `/usr/extra/lib/arm/cmsis` respectively, to the `/usrs/extra/workspace/projetoZeta/lib` whenever it is referenced.

It is important to note that the `Rule` that will make this task, is a secondary customization file, as in the master file I have no way to change.

Besides that need it the secondary `Rule`, which makes copies, is automatically called by other `Rule`, without the need to interfere in each primary, where the `/users/extra/workspace/projetoZeta/lib` directory  is referenced, this should be checked and if necessary the copied files.

In the end, do not know how someone could provide me some example? I got to read the manual and even the https://www.gnu.org/software/make/manual/html_node/Echoing.html Echo I have getting use to help me debug what I'm doing at MAKE.

Parents
  • Currently I'm using one single library folder, where I have all my LPC libraries (plus one from Freescale and one from ST).

    I've generalized my Makefile, so that it allows me to specify a library path, which points to the particular library.

    In addition, I've created an output folder (see Freddie Chopin's Makefile for LPC43xx as a reference on how this can be done).

    The reason the output-folder is required, is that whenever you build your project, the .o files are usually placed right next to your sources.

    If that is the case, and you have two different projects, one that uses Ethernet and one that does not use Ethernet, then you may have to use "make clean" whenever you've just build the other project, in order to get the files up to date. An output folder that belongs to your project would be a good solution to this problem, plus it would speed up building as you can suddenly use dependencies.

    I've never had problems with symlinks and GCC. If you have problems with your setup, it may be happening if you're running on Windows, but it would more likely be a problem with Eclipse.

    I use symlinks when I build my GCC toolchain, so I'm very confident that GCC can handle it. If you're already on Linux, then I would blame Eclipse.

    -The Makefile is capable of doing the copying, but it might be a bit complicated. As you write, it might be an easier solution to use a script for this task.

    -If you end up copying files, you may want to take a look at 'man cp'; it'll tell you about the '-R' option for recursively copying the files. I don't think you will need any other switches, but I'll mention the '-n' switch is so that files will not be overwritten, and the '-f' switch is in order to force copying (overwrite target files).

Reply
  • Currently I'm using one single library folder, where I have all my LPC libraries (plus one from Freescale and one from ST).

    I've generalized my Makefile, so that it allows me to specify a library path, which points to the particular library.

    In addition, I've created an output folder (see Freddie Chopin's Makefile for LPC43xx as a reference on how this can be done).

    The reason the output-folder is required, is that whenever you build your project, the .o files are usually placed right next to your sources.

    If that is the case, and you have two different projects, one that uses Ethernet and one that does not use Ethernet, then you may have to use "make clean" whenever you've just build the other project, in order to get the files up to date. An output folder that belongs to your project would be a good solution to this problem, plus it would speed up building as you can suddenly use dependencies.

    I've never had problems with symlinks and GCC. If you have problems with your setup, it may be happening if you're running on Windows, but it would more likely be a problem with Eclipse.

    I use symlinks when I build my GCC toolchain, so I'm very confident that GCC can handle it. If you're already on Linux, then I would blame Eclipse.

    -The Makefile is capable of doing the copying, but it might be a bit complicated. As you write, it might be an easier solution to use a script for this task.

    -If you end up copying files, you may want to take a look at 'man cp'; it'll tell you about the '-R' option for recursively copying the files. I don't think you will need any other switches, but I'll mention the '-n' switch is so that files will not be overwritten, and the '-f' switch is in order to force copying (overwrite target files).

Children