On 05/31/2013 01:35 PM, Alain Leblanc wrote: > What happens when enable_language(Fortran) is invoked and CMake > can not find the gfortran shared libraries?
CMake does not actually search for the libraries. It runs the Fortran compiler front-end to build a test executable and passes options to ask the compiler to print out the link line it generates to invoke the linker. From that CMake extract the -L and -l options needed for Fortran. It never actually searches for the library files. The automatic use of the cross-language linking feature only works when CMake knows there is Fortran in one of the libraries because it is a library built within the same project (or imported from a CMake-built project that uses install(EXPORT)). > I'm asking because I'm using a couple of Fortran programs in a big > C++ project, and I don't use enable_language() but just use > find_library(GFORTRAN gfortran ...) > ... > target_link_library(myProj $(GFORTRAN) ...) If you're not actually compiling any Fortran then this is a fine approach for a platform-specific dependency. As far as CMake knows gfortran is just another library in this case. > create a symbolic link from libgfortran.so.3 to libgfortran.so > in order for the find_library() line to work. The .so.3 version will not be picked up by the linker with "-lgfortran". This is a common convention for libraries on Linux, and many packages have a separate -dev version that adds the .so symlink. However, in the case of the Fortran runtime library the .so may never be directly published in a system library directory but rather in an internal compiler directory. CMake would only know about that directory after enabling Fortran in the project. -Brad -- 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