Hi, I attempted to use create_test_sourcelist with a Fortran routines using the
recipe from the cmake book. The CMakeLists.txt and fortran file are given
below. The test *.cpp file is generated correctly, but the linker gives me this:
cd /home/eli/work/selfe_trunk/build/unittest/Hydro &&
/usr/local/dms/pkg/cmake/2.8.8/bin/cmake -E cmake_link_script
CMakeFiles/Driver.dir/link.txt --verbose=1
/usr/bin/c++ -O3 -DNDEBUG CMakeFiles/Driver.dir/driver.cpp.o
CMakeFiles/Driver.dir/test_attempt.F90.o -o ../../bin/Driver -rdynamic
-L/usr/local/dms/pkg/hdf5/1.8.7-intel12.0-parallel/lib -lifport -lifcore -limf
-lsvml -lipgo -lintlc -lpthread -lirc_s -ldl
CMakeFiles/Driver.dir/driver.cpp.o:(.data+0x8): undefined reference to
`test_attempt(int, char**)'
I can't tell whether this is a Fortran-C interoperability issue or some sort of
linking problem. In order to reduce the interoperability issue as a confounder,
I manually altered the generated driver.cpp file my Fortran file to
sequentially eliminate the double pointer, then all arguments and finally the
return value. In each case I got the same result: the symbol test_attempt is
in test_attempt.F90.o but it is considered an undefined reference. Anyone know
how to make it work? The solution should be of general interest since this is
always the signature expected by create_test_sourcelist. I am on ifort with
cmake 2.8.8.
Thanks -- Eli
**********
create_test_sourcelist(Tests
driver.cpp
test_attempt.F90)
add_executable(Driver ${Tests})
set(TestsToRun ${tests})
remove(TestsToRun driver.cpp)
foreach (test ${TestsToRun})
get_filename_component(TName ${test} NAME_WE)
add_test( ${TName} Driver ${TName})
endforeach()
***********
function test_attempt(argc,argv) bind( c)
use iso_c_binding
integer(c_int) :: test_attempt
integer(c_int) :: argc
type(c_ptr), dimension(1) :: argv
print*, "Hello"
test_attempt=0
end function
--
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