Jeremy,

I think that the "problem" is that CMake was never oriented toward the situation that you, and many others, have where it is "very expensive" to have the code under development as a part of a much larger project. When you get to a relatively stable situation, you will appreciate the automated building and testing of the entire project. However, I agree that, until you reach a "stable" set of changes, you need to be able to "focus" on one part of the project and postpone having those changes tested against the rest of the project.

My suggestion would be to use a cache variable to select your "current target".

SET(CURRENT_TARGET "All" CACHE String "Part of the project under development")

IF (CURRENT_TARGET MATCHES "Interpreter")
    SUBDIR (Interpreter)
ELSEIF (CURRENT_TARGET MATCHES "Translator")
    SUBDIR (Translator)
ELSEIF (CURRENT_TARGET MATCHES "Backend")
    SUBDIR (Backend)
ELSEIF (CURRENT_TARGET MATCHES "All")
    SUBDIR (Interpreter)
    SUBDIR (Translator)
    SUBDIR (Backend)
ELSE
    ERROR ("Invalid CURRENT_TARGET")
ENDIF


Richard

On Apr 9, 2009, at 3:38 PM, Jeremy Cowgar wrote:

Alexander Neundorf wrote:

No, that's wrong in principle.
In the cmake files there is no current target, they describe all targets.

If you want to do something when some target is built, you have to do this via dependencies, either via add_custom_command() or add_custom_target().


Hm, the reason I want it is because of how I am using CMake and triggering a generator. I have to translate .e files (Euphoria) into .c files when the source .e files change. Yesterday, Bill Hoffman helped me quite a bit with this and I finally got that working. The only problem is that we translate 3 main programs, the interpreter, the translator and the backend. Each one produces about 115,000 lines of C code and it takes ~20 seconds for each target. So, here's what happens... I edit common.e which is included in all three programs (interpreter, translator and backend). Right now I am working on the interpreter, so I do:

wmake eui
To rebuild the interpreter. However, CMake now sees that common.e has changed, it triggers running cmake.exe to rebuild the makefiles and when it does so, all three produces are triggered for a generation because common.e has changed. That would be correct if I was building all three programs, however, I am only working on the interpreter, I don't want to wait an extra 40 seconds to translate the backend and translator when I am not working on it. Now, wmake eui only compiles the interpreter source files, but the translation is time consuming (considering you edit, compile, edit compile, etc...).

Some how I would like to realize that they want to build the interpreter only, don't worry about re-translating the translator and backend right now.

You can see my two main CMake files in : http://rapideuphoria.svn.sourceforge.net/viewvc/rapideuphoria/trunk/source/ to see how I am doing this currently. I just can't figure out how to not re-translate the other programs that I really don't care about right now.

Thanks for any help,

Jeremy


_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to