cmake && makefile 使用
cmake
记录一些cmake中使用的命令
cmake 通常使用 out-of-source build,将 build 内容存放在 source tree 之外。
out-of-source build 时 source tree 中不能有 cmake 相关文件。如果 source tree 中有 CMakeCache.txt
,cmake 会认为目录是一个 build tree。
cmake 中使用绝对路径,不能拷贝 build tree
set(CMAKE_CXX_FLAGS "-std=c++14 -O2 -g -Wall ${OpenMP_CXX_FLAGS}") # 设置C++编译选项
set(CUDA_NVCC_FLAGS "-Xcompiler -fopenmp -std=c++14 -O2 -g -arch=compute_70 -code=sm_70 --ptxas-options=-v -lineinfo -keep") # 设置cuda编译选项
option(SHOW_SCHEDULE "Print the schedule" ON) #设置一个ON/OFF的选项
add_definitions(-DBACKEND=0) #增加一个define
if (BACKEND STREQUAL "serial")
add_definitions(-DBACKEND=0)
elseif(BACKEND STREQUAL "group")
add_definitions(-DBACKEND=1)
else()
MESSAGE(ERROR "invalid mode")
endif() # if使用,endif中留空即可
add_executable(${BENCHMARK} micro-benchmark/${BENCHMARK}.cpp) #
cmake -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON
输出makefile选项set(CMAKE_CUDA_FLAGS "-Xcompiler -std=c++14 -O2 -g -arch=compute_70 -code=sm_70 -cudart=shared ")
设置cuda flag
cmake_minimum_required(VERSION 3.13) # cmake最低版本(必须指定)
project(Demo1) # 项目信息
add_executable(Demo a.cc b.cc) # 从 a.cc b.cc 编译可执行文件 Demo
aux_source_directory(. DIR_SRCS) # 查找目录 . 下所有文件,结果存到 ${DIR_SRCS}
add_subdirectory(math) # 添加子目录,处理器其中 CMakeLists.txt
option (USE_MYMATH "Use provided math implementation" ON) # 添加选项
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # 生成 compile_commands.json 包含所有编译指令
-DCMAKE_EXPORT_COMPILE_COMMANDS=on
CMAKE_CURRENT_BINARY_DIR
: 当前 subdirectory 在 build tree 中的目录CMAKE_CURRENT_SOURCE_DIR
: 当前源代码路径CMAKE_BINARY_DIR
: build tree 顶层路径CMAKE_SOURCE_DIR
: 源代码路径顶层EXECUTABLE_OUTPUT_PATH
:
add_library()
set()
get_filename_component()
set_source_files_properties(GENERATED)
makefile
@前缀:执行指令,不在屏幕显示
$@
: target being generated$<
: first prerequiste$^
: all prerequiste
all: library.cpp main.cpp
$@
evaluates to all
$<
evaluates to library.cpp
$^
evaluates to library.cpp main.cpp
example :
# Define required macros here
SHELL = /bin/bash
OBJS = main.o factorial.o hello.o
CFLAG = -Wall -g
CC = gcc
hello:${OBJ}
${CC} ${CFLAGS} -o $@ ${OBJS}
clean:
-rm -f *.o core *.core
.cpp.o:
${CC} ${CFLAGS} -c $<