从来没见过语法像CMake这么烂的DSL,构建项目的时候总是要去查文档,但是查了文档还是不知道该怎么办💢,这里记一下自己常用的一些写法。
有用的Tutorial cmake cook book
都塞到lib里吧! 如果我们希望生成的lib能够在制定的目录出现,那么我们需要在最顶层的CMakeList里加上:
1 SET (LIBRARY_OUTPUT_PATH_ROOT ${PROJECT_SOURCE_DIR} /lib)
这样,我们在项目中生成的lib文件就会自动的生成到项目主目录下的lib目录了,如下:
如果在Cmake里进行了lib的创建:
1 2 3 4 add_library (${PROJECT_NAME} SHARED src/Interface.cpp src/tools.cpp src/Parser.cpp)
则该lib文件会在lib目录下产生。
创建cmake目录 一些项目的主目录下会有cmake这个目录,具体来讲里面会存放一些cmake文件,大概存放的内容一般有:
一些cmake的指令文件,例如一般来讲检查环境来设置变量的check.cmake,用来引入外部库的xxx.cmake,使用的方法也很简单,直接include绝对路径即可
1 2 include ("${CMAKE_CURRENT_SOURCE_DIR}/cmake/check.cmake" )
或者提前制定好cmake的module path,这样可以直接用文件名完成任务:
1 2 set (CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake;${CMAKE_MODULE_PATH}" )include (lexy)
另外一种很常见的是在这个目录下再放一个module文件夹,里面存放的是一些查找Pakcage的Find脚本,例如FindCUDNN.cmake
之类的,在CMakeList里通过FIND_PACKAGE(CUDNN REQUIRED)
就会自动的调用FindCUDNN来找到CUDNN并设置XXX_FOUND、XXX_INCLUDE等变量。
1 2 find_package (Threads)target_link_libraries (calc-cpu-flops fpkernel ${CMAKE_THREAD_LIBS_INIT} )
用变量表示目录下的一堆文件 1 2 file (GLOB LIB_SOURCE "${CMAKE_CURRENT_LIST_DIR}/cpufp_kernel_*.s" )add_library (fpkernel ${LIB_SOURCE} )
1 2 3 4 include_directories (${PROJECT_SOURCE_DIR} )include_directories ( ${PROJECT_SOURCE_DIR} /include )
Find Libs openmpi 1 2 3 4 5 6 7 find_package (MPI REQUIRED)add_executable (hello-mpi hello-mpi.cpp)target_link_libraries (hello-mpi PUBLIC MPI::MPI_CXX )
openmp 1 2 3 4 5 6 7 8 find_package (OpenMP REQUIRED)if (OPENMP_FOUND) include_directories ("${OPENMP_INCLUDES}" ) link_directories ("${OPENMP_LIBRARIES}" ) set (CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}" ) set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )endif (OPENMP_FOUND)
function 缩减工作量 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 function (add_mma_test_executable name) add_executable (${name} ${name} .cu) set_target_properties (${name} PROPERTIES CUDA_ARCHITECTURES "86" ) set_target_properties (${name} PROPERTIES CUDA_SEPARABLE_COMPILATION ON ) target_link_libraries (${name} PRIVATE ${CUDA_LIBRARIES} )endfunction () add_mma_test_executable(mma_m8n8k4_fp16) add_mma_test_executable(mma_m8n8k16_int8) add_mma_test_executable(mma_m8n8k16_int8_ldmatrix) add_mma_test_executable(mma_int8_64x64x16) add_mma_test_executable(mma_int8_64x64x64) add_mma_test_executable(mma_int8_128x256x64)
一些小问题
Remote SSH的时候,可能有时候会出现环境配置没有问题,但是头文件在clion里就是找不到,会出现红色的下划线
解决:Tools | Resync with Remote Hosts
Comments