Re: [CMake] Compiling object files.
Hi Johannes, On 3 April 2013 17:44, Johannes Zarl wrote: > Short answer: normally you don't and you shouldn't add statements to compile > object files. > > CMake is a build system generator, not a build-system in itself. I.e. you only > tell cmake "I want to build library A from source files a.cpp and b.cpp, and I > want to link my application C , which is created from c.cpp, to the library > A". CMake then generates the build system (e.g. Makefiles or a Visual Studio > solution) for you. Thanks. I guess that makes sense. > If you have problems with the terminology and concepts behind cmake, I would > recommend browsing through the wiki ( > http://www.cmake.org/Wiki/CMake#Basic_Introductions ). While it can be > overwhelming at first, there is a wealth of information to be found there. Thanks. I have been impressed by the quantity of CMake documentation. There is not as much for Fortran, but I think that by now I've learnt most of the Fortran-specific stuff. I will keep reading through the docs. As you said, it is a bit overwhelming at first. >> There is no "add_object" function or anything like it... Maybe I am >> going about it the wrong way. Maybe I should not be thinking in terms >> of making object files at all. Perhaps I should be planning to do >> something like: >> >> add_executable(myprogram ${HUGE_LIST_OF_200_FILES}) > > That's the right way to go. Although if you have over 200 input files, you > might want to group them into libraries if that's appropriate. Thanks. At least now I have the right idea. I think I will try to come up with logical groupings that can be turned into libraries. > Converting incrementally can't be done IMO (at least not without significant > overhead). Since you would probably use the Makefile generator of cmake, you > would probably just end up with cmake overwriting your makefiles or similar > problems. I don't mean that I expect to compile the entire program with a half-Makefile, half-CMake system. I like your idea of making libraries. If I can make a library with a handful of files and I can verify that the compile didn't fail and the library has the correct symbols, I would call that a successful incremental step. > I hope that cleared up some of the confusion. Please do ask again if there are > problems... Very helpful. Thanks. Cheers, Daniel. -- 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] Compiling object files.
Hi Daniel, On Wednesday, 3. April 2013, 16:06:36, Daniel Carrera wrote: > Summary: How do I use CMake to compile object files? Or is this the > wrong question to ask? (i.e. *should* I be compiling object files?) Short answer: normally you don't and you shouldn't add statements to compile object files. CMake is a build system generator, not a build-system in itself. I.e. you only tell cmake "I want to build library A from source files a.cpp and b.cpp, and I want to link my application C , which is created from c.cpp, to the library A". CMake then generates the build system (e.g. Makefiles or a Visual Studio solution) for you. > Details: > - > I am starting to learn CMake, so I am not even sure I am formulating > my questions the right way... I have a large Makefile that I want to > try to convert to CMake. I did not write the Makefile and I know > little about build systems. But I am interested in CMake and I want to > experiment anyway. If you have problems with the terminology and concepts behind cmake, I would recommend browsing through the wiki ( http://www.cmake.org/Wiki/CMake#Basic_Introductions ). While it can be overwhelming at first, there is a wealth of information to be found there. > My first question is how to convert something like > this: > > cparam.o: cparam.f90 cparam.local cparam.inc cparam_pencils.inc > if [ "" ]; then \ > rm -f cparam.inc; \ > rm -f cparam_pencils.inc; \ > ln -s cparam.inc cparam.inc; \ > ln -s cparam_pencils.inc cparam_pencils.inc; \ > fi > $(FC) $(FFLAGS) $(FFLAGS_GENERAL) $(F90FLAGS) -o cparam.o -c > cparam.f90 > > > I cannot imagine what the if statement could possibly accomplish, but > I trust that CMake would make the whole thing unnecessary. The if statement is effectively just a block-comment. You can just ignore it and its contents. > So I figure > ("hope") that all I have to do is tell CMake to make the object file > cparam.o. The problem is that I cannot find anything in the > instructions for making object files. All I see is commands like: > > > add_executable(hello hello.f90 world.f90) > > add_library(particles backend.f90 vector.f90 const.f90) > > > There is no "add_object" function or anything like it... Maybe I am > going about it the wrong way. Maybe I should not be thinking in terms > of making object files at all. Perhaps I should be planning to do > something like: > > add_executable(myprogram ${HUGE_LIST_OF_200_FILES}) That's the right way to go. Although if you have over 200 input files, you might want to group them into libraries if that's appropriate. > My worry with this approach is that I see no room to convert the > Makefile incrementally. I was thinking of compiling just one object > file, check that that works and has the right symbols, and then move > to the next object file. Whereas this other option looks like an "all > or nothing" proposition. Converting incrementally can't be done IMO (at least not without significant overhead). Since you would probably use the Makefile generator of cmake, you would probably just end up with cmake overwriting your makefiles or similar problems. I hope that cleared up some of the confusion. Please do ask again if there are problems... Johannes -- 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] Compiling object files.
Hello Daniel, I'm also starting with CMake and I had a problem to link an object to my project. I will describe you what I did because it works for me but keep in mind that maybe there is a better way. First, you can compile object files with the command "execute_process": execute_process( COMMAND $(FC) $(FFLAGS) $(FFLAGS_GENERAL) $(F90FLAGS) -o cparam.lib -c cparam.f90 ) Note that it is not "cparam.o" but "cparam.lib". Then you can link it to your project as a library with the command "target_link_libraries": target_link_libraries( your_project cparam.lib ) Hope it can help you. Damien -- View this message in context: http://cmake.3232098.n2.nabble.com/Compiling-object-files-tp7583910p7583911.html Sent from the CMake mailing list archive at Nabble.com. -- 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
[CMake] Compiling object files.
Hello, Summary: How do I use CMake to compile object files? Or is this the wrong question to ask? (i.e. *should* I be compiling object files?) Details: - I am starting to learn CMake, so I am not even sure I am formulating my questions the right way... I have a large Makefile that I want to try to convert to CMake. I did not write the Makefile and I know little about build systems. But I am interested in CMake and I want to experiment anyway. My first question is how to convert something like this: cparam.o: cparam.f90 cparam.local cparam.inc cparam_pencils.inc if [ "" ]; then \ rm -f cparam.inc; \ rm -f cparam_pencils.inc; \ ln -s cparam.inc cparam.inc; \ ln -s cparam_pencils.inc cparam_pencils.inc; \ fi $(FC) $(FFLAGS) $(FFLAGS_GENERAL) $(F90FLAGS) -o cparam.o -c cparam.f90 I cannot imagine what the if statement could possibly accomplish, but I trust that CMake would make the whole thing unnecessary. So I figure ("hope") that all I have to do is tell CMake to make the object file cparam.o. The problem is that I cannot find anything in the instructions for making object files. All I see is commands like: add_executable(hello hello.f90 world.f90) add_library(particles backend.f90 vector.f90 const.f90) There is no "add_object" function or anything like it... Maybe I am going about it the wrong way. Maybe I should not be thinking in terms of making object files at all. Perhaps I should be planning to do something like: add_executable(myprogram ${HUGE_LIST_OF_200_FILES}) My worry with this approach is that I see no room to convert the Makefile incrementally. I was thinking of compiling just one object file, check that that works and has the right symbols, and then move to the next object file. Whereas this other option looks like an "all or nothing" proposition. I would welcome any words of advice here. Cheers, Daniel. -- Lord of the rings calendar in your Linux/Unix/Mac terminal: cat /usr/share/calendar/calendar.lotr -- 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