My apologies for responding earlier with an incorrect Subject line. I
hope the following will be helpful.

From: ankit jain <ankitgu...@gmail.com>
> The objective here to include all the .desc files in the cmakelist and

> when we make it it should generate the executable for it like if we 
> include abc.desc then after make it should generate a file abc which 
> is executable and a script which has test cases but generated by .desc

> file only. In order to achieve that guide me how to write cmake list 
> file for it so that it wiil produce equivalent behaviour as normal 
> make does using unix makefiles.
>
> When we make to the unix makefiles it is generating the equivalent 
> executable mentioned inthat .desc file.
>
> I want to achieve that through Cmakelist files.

First of all remember this: Your CmakeList files do not execute any of
these things: what they do is to write new makefiles for you.  In order
to succeed with CMake, what you need to do is figure out how to tell
CMake the things that need to be in your new makefiles so that those
makefiles will do the necessary things that your old makefiles do.

>From your earlier emails I gather the following:

 - Somewhere on your filesystem there is a file named something.desc.

 - This file, something.desc, consists of one line something like this:

    $exec_string = "./abc"

 - Because of this line occurring in this file, something.desc, your
makefile becomes aware that it must create an executable file named
"abc".

So what would happen if you were to create another .desc file tomorrow,
somethingelse.desc, containing this line:

    $exec_string = "./xyz"

And suppose you put this file in the same directory as something.desc.
Based on what you have told us so far, which is that your makefile
creates "./abc" just because there is a .desc file with that string in
it, should we expect that now your makefile will also create a different
executable file "./xyz" in addition to the file "./abc"?  Somehow your
makefile would be able to deduce what the correct source files are to
build this new executable?

This is beyond belief.  Clearly there are important pieces of
information about your process that you have not thought to tell us
because you assumed they would be common knowledge.  They are not common
knowledge, and we are completely in the dark still.


Is it possible that the existence of this file something.desc actually
has no causal influence on your makefile at all?  Is it possible that
someone did this:

 1. They wrote a makefile that contains in it a target something like
this, so that 'make' will know that it must build the executable file
"abc":

    abc: $(SOURCEFILES)
         $(BUILD) $(SOURCEFILES) $(OPTIONS) -o abc

 2. In order to support some other part of your development process that
runs _after_ 'make' has completed, they wrote a file named
something.desc that tells this other process about "abc", analogous to
the way the makefile told 'make' about "abc":

    $exec_string = "./abc"

In other words, is is possible that there is actually no
cause-and-effect relationship between the .desc file and what your
makefile does, but instead both of these things are effects that were
caused by a decision someone made in the past to build and use an
executable file named "./abc" in a certain way?

If this is the case, then all CMake has to do for you is to generate a
new makefile with the target "abc" as before, for example "abc:
sourcefile1 sourcefile2", etc.  In that case CMake has no reason to
read, write, or do anything else with this file something.desc which is
intended to be used by a different tool.  Usually when one of us has
such a requirement, it means that in a CMakeLists.txt file we have a
command like this:

    ADD_EXECUTABLE(abc ${SOURCE_FILES})

where ${SOURCE_FILES} is a list of the files that must be compiled in
order to build the executable.

If this is _not_ the case, then you must tell us more about what
actually has to happen while your old makefile is executing.  All you
have told us so far is that 'make' must build an exectuable file named
"./abc", which does not tell us what is so different about your process
that you cannot simply write an ADD_EXECUTABLE command to create "abc".

If your difficulty is that your makefile must somehow _execute_ the file
"./abc" after building it, then the ADD_CUSTOM_COMMAND command in CMake
may help you, as others have suggested.  But now I am not sure this is
what you are trying to do at all; the only definite action that I
understand you require 'make' to do is to build the executable file
"./abc".

Perhaps you must lead us through the process in exact detail, step by
step, something like this:

  1. You cd to the directory where you want to build your project.

  2. You run 'make'.

  3. 'make' does some things in other parts of the project irrelevant to
the file "./abc".

  4. 'make' visits a subdirectory named ________.

  5. 'make' performs the command _____________ in this subdirectory.

  6. 'make' compiles source files that it identifies because
____________.

  7. 'make' links the compiled objects to create the executable file
"abc" because ___________.

  8. 'make' performs the command _____________ in this same
subdirectory.

  9. 'make' goes on to do other things not relevant to this discussion,
and then it is done.

I think you have told us that step 6 must occur somehow, but you haven't
really told us anything about how the makefile decides to do this or
what else it does.

David Karr

_______________________________________________
CMake mailing list
CMake@cmake.org
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to