Skip to content

Instantly share code, notes, and snippets.

@phaustin
Last active November 29, 2015 19:09
Show Gist options
  • Select an option

  • Save phaustin/f64b7b21b60c372386c6 to your computer and use it in GitHub Desktop.

Select an option

Save phaustin/f64b7b21b60c372386c6 to your computer and use it in GitHub Desktop.
Readme_cmake.org

building cmake


export LD_LIBRARY_PATH=/users/user-soft/lib64 export LD_RUN_PATH=/users/user-soft/lib64 export CXX=/users/user-soft/bin/g++ export LM_LICENSE_FILE=/users/user-soft/pgi12_2012 export FC=/users/user-soft/pgi12_2012/linux86-64/2012/bin/pgf90

./configure –prefix=/users/user-soft/usr251_Centos/ –qt-gui –qt-qmake=/usr/lib64/qt4/bin/qmake

git http://github.com/certik/qsnake.git has fortran_test example

execute_process(COMMAND python -c “import sys;print ‘%s/include/python%d.%d’ % (sys.prefix,sys.version_info[0],sys.version_info[1])” OUTPUT_VARIABLE PYTHON_INCLUDE_PATH)

cmake -DCMAKE_INSTALL_PREFIX:PATH=/home/phil/cmake /home/phil/repos/cython/qsnake/fortran_test

dry run and debugging:

/nfs/kite/home/phil/repos/advection/CMakeLists.txthi /nfs/kite/home/phil/repos/isccp /nfs/kite/home/phil/repos/jason/CMakeLists.txt /home/datatmp/phil/repos/scm15h/CMakeLists.txt

setting a cmake master directory


set(CMAKE_MODULE_PATH “/home/phil/cmake”)

building a program with a libraries


add_executable(code.exe SRC/CIRC_JIANGNANS_WAY/OFFLINE_RAD_DRIVER.f90) target_link_libraries(code.exe circ phys random rad isccp)

variable examples


${CMAKE_SOURCE_DIR}/sensor_planck_functions_test.f90” set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/testlib) set(CMAKE_INSTALL_PREFIX /home/phil/lib/python) set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/include_g95)

fortran examples


set(CMAKE_Fortran_COMPILER g95) set(CMAKE_Fortran_FLAGS “-ffixed-form -d8 -fsloppy-char -ftrace=full -ffixed-form -d8 -fsloppy-char -ftrace=full -freal=nan” CACHE string “g95 flags”) set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/include_g95) enable_language(Fortran)

custom directories


set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin) set(CMAKE_Fortran_MODULE_DIRECTORY ${PROJECT_BINARY_DIR}/include_g95)

removing a filename


FILE(GLOB files_f90 “*.f90”) LIST(REMOVE_ITEM files_f90 “${CMAKE_SOURCE_DIR}/sensor_planck_functions_test.f90”)

processing extra files in a macro


macro(CYTHON_ADD_MODULE name) add_custom_command( add_library(${name} MODULE ${name}.cpp ${ARGN})

install and test


install(TARGETS bright LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX})

add_custom_target(test COMMAND python ${CMAKE_SOURCE_DIR}/test_bright.py DEPENDS COMMENT “execute test_bright.py”)

http://eop-cfi.esa.int/CFI/ee_cfi_software.html

using indirection in a macro list and target and source file properties


http://www.cmake.org/pipermail/cmake/2008-March/020255.html http://stackoverflow.com/questions/148570/using-pre-compiled-headers-with-cmake

if (MSVC) set_target_properties(abc PROPERTIES COMPILE_FLAGS “/Yustd.h”) set_source_files_properties(std.cpp PROPERTIES COMPILE_FLAGS “/Ycstd.h” endif(MSVC)

(intdir is intermediate directory expanded by mscv ide

MACRO(ADD_MSVC_PRECOMPILED_HEADER PrecompiledHeader PrecompiledSource SourcesVar) IF(MSVC) GET_FILENAME_COMPONENT(PrecompiledBasename ${PrecompiledHeader} NAME_WE) SET(PrecompiledBinary “$(IntDir)/${PrecompiledBasename}.pch”) SET(Sources ${${SourcesVar}})

SET_SOURCE_FILES_PROPERTIES(${PrecompiledSource} PROPERTIES COMPILE_FLAGS “/Yc"${PrecompiledHeader}" /Fp"${PrecompiledBinary}"” OBJECT_OUTPUTS “${PrecompiledBinary}”) SET_SOURCE_FILES_PROPERTIES(${Sources} PROPERTIES COMPILE_FLAGS “/Yu"${PrecompiledHeader}" /FI"${PrecompiledHeader}" /Fp"${PrecompiledBinary}"” OBJECT_DEPENDS “${PrecompiledBinary}”)

LIST(APPEND ${SourcesVar} ${PrecompiledSource}) ENDIF(MSVC) ENDMACRO(ADD_MSVC_PRECOMPILED_HEADER)

ADD_MSVC_PRECOMPILED_HEADER(“stdafx.h” “stdafx.cpp” MY_SRCS) ADD_EXECUTABLE(MyApp ${MY_SRCS})

set up testing


enable_testing() add_test(NAME test_advec COMMAND python ${CMAKE_SOURCE_DIR}/doit.py ${plot_dir})

add_custom_target(cacheclean COMMAND rm -rf CMakeCache.txt DEPENDS cyread COMMENT “remove the cache file”)

using lists


> You can put the name of the list in another list, instead of its contents. > And use a nested foreach to extract all of the contents. > > set(fooa 1 2 3) > set(foob a b c) > message(${fooa}) > message(“${fooa}”) > message(“${foob}”) > list(APPEND foos fooa) > list(APPEND foos foob) > foreach(a ${foos}) > message(“new list”) > foreach(b ${${a}}) > message(${b}) > endforeach(b) > endforeach(a)

forcing build outside of source tree


make a new directory

run

cmake path_to_CMakeLists.txt

note that you want to specify the directory, and exclude the CMakeLists.txt file

finding a library


FIND_LIBRARY(RESULT mylib.so PATHS ${CMAKE_BINARY_DIR}/res)

compiling tests for netcdf library – macro examples


see /users/phil/install/netcdf-fortran-4.4-beta1/examples/F90

— fortran90

cmake_minimum_required(VERSION 2.8.8) set(CMAKE_Fortran_COMPILER gfortran) enable_language(Fortran)

set(NETCDF_BASE /users/user-soft/usr251_Centos/gfortran) find_library(netcdf_lib NAMES netcdf PATHS ${NETCDF_BASE}/lib NO_DEFAULT_PATH) find_library(netcdf_libf NAMES netcdff PATHS ${NETCDF_BASE}/lib NO_DEFAULT_PATH)

MACRO(add_bin_test prefix F) ADD_EXECUTABLE(${prefix}_${F} ${F}.f90) TARGET_LINK_LIBRARIES(${prefix}_${F} ${netcdf_lib} ${netcdf_libf} /users/user-soft/lib64/libgfortran.so) IF(MSVC) SET_TARGET_PROPERTIES(${prefix}_${F} PROPERTIES LINK_FLAGS_DEBUG ” /NODEFAULTLIB:MSVCRT” ) ENDIF() ADD_TEST(${prefix}_${F} ${EXECUTABLE_OUTPUT_PATH}/${prefix}_${F}) IF(MSVC) SET_PROPERTY(TEST ${prefix}_${F} PROPERTY FOLDER “tests/”) ENDIF() ENDMACRO()

SET(CMAKE_INCLUDE_CURRENT_DIR ON) INCLUDE_DIRECTORIES(“${NETCDF_BASE}/include”)

SET(exam_F_tests simple_xy_wr simple_xy_rd sfc_pres_temp_wr sfc_pres_temp_rd pres_temp_4D_wr pres_temp_4D_rd)

FOREACH(F ${exam_F_tests}) add_bin_test(F_tests ${F}) ENDFOREACH()

SET(CLEANFILES sfc_pres_temp.nc simple_xy.nc pres_temp_4D.nc simple_nc4.nc simple_xy_nc4.nc) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES “${CLEANFILES}”)

– C

cmake_minimum_required(VERSION 2.8.8)

set(NETCDF_BASE /users/user-soft/usr251_Centos/gfortran) find_library(netcdf_lib NAMES netcdf PATHS ${NETCDF_BASE}/lib NO_DEFAULT_PATH)

MACRO(add_bin_test prefix F) ADD_EXECUTABLE(${prefix}_${F} ${F}.c) TARGET_LINK_LIBRARIES(${prefix}_${F} ${netcdf_lib}) IF(MSVC) SET_TARGET_PROPERTIES(${prefix}_${F} PROPERTIES LINK_FLAGS_DEBUG ” /NODEFAULTLIB:MSVCRT” ) ENDIF() ADD_TEST(${prefix}_${F} ${EXECUTABLE_OUTPUT_PATH}/${prefix}_${F}) IF(MSVC) SET_PROPERTY(TEST ${prefix}_${F} PROPERTY FOLDER “tests/”) ENDIF() ENDMACRO()

SET(CMAKE_INCLUDE_CURRENT_DIR ON) INCLUDE_DIRECTORIES(“${NETCDF_BASE}/include”)

SET(exam_C_tests simple_xy_wr simple_xy_rd sfc_pres_temp_wr sfc_pres_temp_rd pres_temp_4D_wr pres_temp_4D_rd)

FOREACH(F ${exam_C_tests}) add_bin_test(C_tests ${F}) ENDFOREACH()

SET(CLEANFILES sfc_pres_temp.nc simple_xy.nc pres_temp_4D.nc simple_nc4.nc simple_xy_nc4.nc) SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES “${CLEANFILES}”)

----------- building hist2d

project(fasthist) cmake_minimum_required(VERSION 2.8) message(“system is ${CMAKE_SYSTEM_NAME}”) set(homedir $ENV{HOME}) set(CMAKE_MODULE_PATH “${homedir}/cmake”) set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/testlib) set(CMAKE_INSTALL_PREFIX ${homedir}/lib/python) set_source_files_properties( ${fasthist_SOURCE_DIR}/fasthist.pyx PROPERTIES CYTHON_IS_CXX TRUE )

include_directories(${PYTHON_INCLUDE_PATH} ${NUMPY_INCLUDE_PATH} ${CMAKE_SOURCE_DIR}) include(UseCython) message(“python is ${PYTHON_EXECUTABLE}”)

set(CYTHON_CXX_EXTENSION “cxx”)

find_package(PythonLibs REQUIRED) find_package(Numpy REQUIRED) find_package(PyInclude REQUIRED) include_directories(${TRUE_PYTHON_INC} ${NUMPY_INCLUDE_PATH} ${fasthist_SOURCE_DIR}})

cython_add_module(fasthist fasthist.pyx)

set_target_properties(fasthist PROPERTIES PREFIX “”) install(TARGETS fasthist LIBRARY DESTINATION ${CMAKE_INSTALL_PREFIX})

add_custom_target(test COMMAND ${PYTHON_EXECUTABLE} ${fasthist_SOURCE_DIR}/test_hist.py fasthist ${LIBRARY_OUTPUT_PATH} DEPENDS fasthist COMMENT “execute test_hist.py”)

------------ findPyInclude.cmake

execute_process( COMMAND ${PYTHON_EXECUTABLE} -c “from distutils.sysconfig import get_python_inc; print get_python_inc()” OUTPUT_VARIABLE PYTHON_INC_PATH ) string(STRIP ${PYTHON_INC_PATH} PYTHON_INC_PATH) FIND_PATH(TRUE_PYTHON_INC Python.h ${PYTHON_INC_PATH} NO_DEFAULT_PATH)

working with object files

http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library

splitting a file name

cmake –help-command get_filename_component GET_FILENAME_COMPONENT(dirname “c:/path/to/dir” NAME)

os independent separators

contro examples

project(fortran_tests)

set(OSX True CACHE BOOL “Test”) if(OSX) message(“osx set to ${OSX}”) endif(OSX)

if (${CMAKE_SYSTEM_NAME} MATCHES “DARWIN”) set(OSX True) endif (${CMAKE_SYSTEM_NAME} MATCHES “DARWIN”)

message(“value of OSX is ${OSX}”)

message(“home is $ENV{HOME}”)

make VERBOSE=1 for full output

rpath handling

note no quotes

set(BUILD_WITH_INSTALL_RPATH TRUE) SET(CMAKE_INSTALL_RPATH ${nc_dir}/lib;${hdf_dir}/lib)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment