[CMake] making executible in mixed C/fortran project
Greetings, I am learning cmake I am building an executable which needs to first compile a C program and then recompiling the object file with another file in fortran. Here is an excerpt from a unix makefile I am attempt to port to cmake as part of my cmake turotial. fileC.o: fileC.c $(C) -DDINT -c fileC.c fileD: fileD.f fileC.o ../lib/libF.a $(F77) $(F77FLAGS) -o fileD fileD.f fileC.o../lib/libF.a $(F77LIB) I think I have learnt enough cmake to do most of the above EXCEPT I am unsure how on compile an object file (in this case fileC.o with a fortran compiler (if I have translated the makefile correctly) Does one rename the file or whatever? Guidance on how to do this would be appreciated ___ 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
Re: [CMake] making executible in mixed C/fortran project
On 11/12/2010 02:46 PM, luxInteg wrote: Greetings, I am learning cmake I am building an executable which needs to first compile a C program and then recompiling the object file with another file in fortran. Here is an excerpt from a unix makefile I am attempt to port to cmake as part of my cmake turotial. fileC.o: fileC.c $(C) -DDINT -c fileC.c fileD: fileD.f fileC.o ../lib/libF.a $(F77) $(F77FLAGS) -o fileD fileD.f fileC.o../lib/libF.a $(F77LIB) I think I have learnt enough cmake to do most of the above EXCEPT I am unsure how on compile an object file (in this case fileC.o with a fortran compiler (if I have translated the makefile correctly) Does one rename the file or whatever? Guidance on how to do this would be appreciated You might try ADD_LIBRARY(C STATIC fileC.c) in junction with TARGET_LINK_LIBRARIES(fileD C ...) since you shouldn't directly refer to object files with CMake. Regards, Michael ___ 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
Re: [CMake] making executible in mixed C/fortran project
On Friday 12 November 2010 13:17:50 Michael Hertling wrote: On 11/12/2010 02:46 PM, luxInteg wrote: Greetings, I am learning cmake I am building an executable which needs to first compile a C program and then recompiling the object file with another file in fortran. Here is an excerpt from a unix makefile I am attempt to port to cmake as part of my cmake turotial. fileC.o: fileC.c $(C) -DDINT -c fileC.c fileD: fileD.f fileC.o ../lib/libF.a $(F77) $(F77FLAGS) -o fileD fileD.f fileC.o../lib/libF.a $(F77LIB) I think I have learnt enough cmake to do most of the above EXCEPT I am unsure how on compile an object file (in this case fileC.o with a fortran compiler (if I have translated the makefile correctly) Does one rename the file or whatever? Guidance on how to do this would be appreciated You might try ADD_LIBRARY(C STATIC fileC.c) in junction with TARGET_LINK_LIBRARIES(fileD C ...) It would not go in the loop add_executable(fileD fileD.f ADD_LIBRARY(fileC STATIC fileC.c ) ${fileC} ) so I tried it outside like so:- SET_SOURCE_FILES_PROPERTIES( fileC.c PROPERTIES COMPILE_DEFINITIONS DINT ) ADD_LIBRARY(fileC STATIC fileC.c ) add_executable(fileD fileD.f ${fileC} ) target_link_libraries(fileD $(F77LIB) ) ---but make ends like so:- CMakeFiles/filedD.dir/filedD.f.o: In function `MAIN__': filedD.f:(.text+0x2f9): undefined reference to `Ddefaults_' filedD.f:(.text+0x32b): undefined reference to `Dorder_' filedD.f:(.text+0x33a): undefined reference to `Dinfo_' collect2: ld returned 1 exit status --- oher suggestions welcomed since you shouldn't directly refer to object files with CMake. ___ 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
Re: [CMake] making executible in mixed C/fortran project
On 11/12/2010 05:37 PM, luxInteg wrote: On Friday 12 November 2010 13:17:50 Michael Hertling wrote: On 11/12/2010 02:46 PM, luxInteg wrote: Greetings, I am learning cmake I am building an executable which needs to first compile a C program and then recompiling the object file with another file in fortran. Here is an excerpt from a unix makefile I am attempt to port to cmake as part of my cmake turotial. fileC.o: fileC.c $(C) -DDINT -c fileC.c fileD: fileD.f fileC.o ../lib/libF.a $(F77) $(F77FLAGS) -o fileD fileD.f fileC.o../lib/libF.a $(F77LIB) I think I have learnt enough cmake to do most of the above EXCEPT I am unsure how on compile an object file (in this case fileC.o with a fortran compiler (if I have translated the makefile correctly) Does one rename the file or whatever? Guidance on how to do this would be appreciated You might try ADD_LIBRARY(C STATIC fileC.c) in junction with TARGET_LINK_LIBRARIES(fileD C ...) It would not go in the loop add_executable(fileD fileD.f ADD_LIBRARY(fileC STATIC fileC.c ) ${fileC} ) Which loop are you talking about, and which value does the fileC variable has here? Moreover, the ADD_LIBRARY() command must not appear among the source files of ADD_EXECUTABLE(), of course. so I tried it outside like so:- SET_SOURCE_FILES_PROPERTIES( fileC.c PROPERTIES COMPILE_DEFINITIONS DINT ) ADD_LIBRARY(fileC STATIC fileC.c ) add_executable(fileD fileD.f ${fileC} ) target_link_libraries(fileD $(F77LIB) ) That's better, but you need to mention the fileC library target in TARGET_LINK_LIBRARIES() for this to work, and again: What's the value of the fileC variable here? Note that you've an equally named target. If you don't really intent to re-use fileC.c, but just want to mix it with the Fortran sources of fileD, you can do so, i.e. you might say ADD_EXECUTABLE(fileD fileD.f fileC.c) but when mixing several languages read about the LINKER_LANGUAGE target property as well as the CMAKE_LANG_LINKER_PREFERENCE and CMAKE_LANG_LINKER_PREFERENCE_PROPAGATES variables. ---but make ends like so:- CMakeFiles/filedD.dir/filedD.f.o: In function `MAIN__': filedD.f:(.text+0x2f9): undefined reference to `Ddefaults_' filedD.f:(.text+0x32b): undefined reference to `Dorder_' filedD.f:(.text+0x33a): undefined reference to `Dinfo_' collect2: ld returned 1 exit status Usually, that means there are missing sources in ADD_EXECUTABLE() or missing libraries in TARGET_LINK_LIBRARIES(); perhaps, you can post a complete but minimal example as a demonstration of this issue. oher suggestions welcomed since you shouldn't directly refer to object files with CMake. Regards, Michael ___ 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