[CMake] Fortran Macro in 2.2

Karl Merkley karl at elemtech.com
Thu Oct 20 10:41:51 EDT 2005


I am using Mac OS X CMake version 2.2.1 or cvs  CMake version 
2.3-20050922.

I have a macro that we use to compile fortran code.  However, it looks 
like it no longer works with the latest code.

# Define a macro to compile Fortran code
MACRO(F77 var outvar)
   SET(new_objs "")
   FOREACH(var_src ${var})
     GET_FILENAME_COMPONENT(var_src_file "${var_src}" NAME_WE)
     SET(var_obj ${var_src_file}${CML_OBJ_EXT})
     # this is a generated file
     SET_SOURCE_FILES_PROPERTIES(${var_obj} PROPERTIES GENERATED ON)
     SET(new_objs ${new_objs} "${var_obj}")
     ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${var_obj}
                        COMMAND ${CML_FXX_COMPILER}
                        ARGS ${CML_FXX_OUT} 
${CMAKE_CURRENT_BINARY_DIR}/${var_obj} ${CML_FXX_INCLUDE} 
${CML_FXX_FLAGS} ${var_src}
                        DEPENDS ${var_src}
                        COMMENT "${CML_FXX_COMPILER} object file"
                        )
   ENDFOREACH(var_src)
   SET(${outvar} ${new_objs})
ENDMACRO(F77)

The macro gets invoked as

F77("${INR_F_SRCS}"    INR_F_OBJS)

The list of source files have  .f  extensions and the return argument 
contains the list of object files that are produced.  The object files 
then get added to a library.

ADD_LIBRARY(cml_lib  ${INR_C_SRCS}  ${INR_F_OBJS} )

There is a lot more that goes on in the CMakeLists.txt but this is the 
core of the problem.  When I run cmake/make the C files get added to 
the library but the object files do not.  When I look in the build.make 
file, there are instructions to compile the Fortran code but there is 
no dependency on the object files to be added to the library so they 
never get built and never get added to the library.

Can anybody suggest a way to work around this?  I have a customer who 
is trying to build the library on Mac OS X 10.4 system which I don't 
have.  I would like to be able to provide a solution ASAP.

   Thanks,
          Karl



More information about the CMake mailing list