Bill Hoffman wrote:
If the included file is newer than the last run of cmake, cmake will re-run during make. In your code, it looks like you write two different files:

"${CMAKE_SOURCE_DIR}/int.ex"
and
"${CMAKE_SOURCE_DIR}/interpreter/int.cmake"

I don't get it...

I don't write int.ex, that is what is translated. That is the main source for the interpreter. Now, when int.ex is translated, int.cmake is updated. Now, this is the problem, or the disconnect..... int.cmake is NOT updated when I run wmake. The EXECUTE_PROCESS call is what causes int.cmake to be updated. What is updated is, parser.e. Let me run through this...

1. I run cmake -G "Watcom WMake" ..

That sees that int.cmake does not exist, and it causes the EXECUTE_PROCESS to run, which generates all sorts of C files as well as int.cmake.

2. I run wmake

This makes my project and everything is great.

3. I edit ../source/parser.e and add new functionality. This file ../source/parser.e is listed in EU_CORE_FILES, which is checked in a FOREACH loop as to if it's newer or not than int.cmake. (See my FOREACH/EXECUTE_PROCESS below)

Now, here is where the problem starts. the int.cmake file is not updated. I only updated parser.e However, I was expecting this to see that parser.e is newer than int.cmake and cause EXECUTE_PROCESS to run again, causing int.cmake to be updated. (See my FOREACH/EXECUTE_PROCESS below)

4. Once done making changes to my project (parser.e is just one of many files, but I keep using it as an example of what I edit), I run wmake. However, int.cmake has not been updated at this point, still. I expected that the FOREACH loop would detect that parser.e is newer than int.cmake and cause the EXECUTE_PROCESS to translate my code again:

FOREACH( file ${EU_CORE_FILES} )
IF( "${CMAKE_SOURCE_DIR}/source/${file}" IS_NEWER_THAN "${CMAKE_CURRENT_BINARY_DIR}/int.cmake" )
   SET( EU_CORE_UPDATE 1 )
 ENDIF()
ENDFOREACH()

IF( EU_CORE_UPDATE )
 MESSAGE( "Translating interpreter..." )
 EXECUTE_PROCESS(
   COMMAND ${TRANSLATOR} -cmakefile "${CMAKE_SOURCE_DIR}/source/int.ex"
   WORKING_DIR ${CMAKE_CURRENT_BINARY_DIR} )
ENDIF()


Does that make it any clearer? I know I am just not describing my process well enough, but I am trying.

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