CMakeList(LSTM-ER-master)
1 project(cnn) 2 cmake_minimum_required(VERSION 2.8 FATAL_ERROR) 3 4 set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 5 set(CMAKE_CXX_FLAGS "-Wall -O2 -std=c++11 -g") 6 7 enable_testing() 8 9 #include_directories(${CMAKE_CURRENT_SOURCE_DIR}) 10 include_directories(${CMAKE_CURRENT_SOURCE_DIR}/cnn) 11 set(WITH_EIGEN_BACKEND 1) 12 13 # look for Boost 14 if(DEFINED ENV{BOOST_ROOT}) 15 set(Boost_NO_SYSTEM_PATHS ON) 16 endif() 17 set(Boost_REALPATH ON) 18 find_package(Boost COMPONENTS program_options serialization REQUIRED) 19 include_directories(${Boost_INCLUDE_DIR}) 20 set(LIBS ${LIBS} ${Boost_LIBRARIES}) 21 22 # look for Eigen 23 find_package(Eigen3 REQUIRED) 24 include_directories(${EIGEN3_INCLUDE_DIR}) 25 26 #configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) 27 28 add_subdirectory(cnn/cnn) 29 add_subdirectory(relation)
1: project(cnn)表示项目的名称是cnn
2: 指定运行此配置文件所需的CMake的最低版本
4: CMAKE_MODULE_PATH是一个目录列表,它指定了由include()或find_package()命令进行加载的CMake模块的搜索路径,这个搜索路径是在检查CMake附带的默认模块之前。
5: CMAKE_CXX_FLAGS是CMake传给C++编译器的编译选项,-Wall这个FLAG的目的是开启所有警告,-o2是要开启编译优化,-std=c++11是要添加C++11支持,-g的意思是调试信息。
7: 启用测试,也就是可以用过make test来进行测试。
10: CMAKE_CURRENT_SOURCE_DIR指的是当前处理的CMakeLists.txt 所在的路径
11: 将WITH_EIGEN_BACKEND的值设置为1,Eigen是一个针对线性代数的C++模板库,用于矩阵、向量、数值求解以及相关算法(关于Eigen看这里),backend意思是后端(关于backend可以看这里)。整句话大概的意思就是设置Eigen作为后端的tensor操作引擎。
14, 15, 16: cmake中对环境变量读写都是通过ENV前缀来访问环境变量,读取环境变量则要使用 $ENV{JAVA_HOME}
这样的格式。BOOST_ROOT意思应该是boost的环境变量,整句话的意思应该是判断BOOST_ROOT这个环境变量是否存在,如果不存在的话就设置Boost_NO_SYSTEM_PATHS的值为ON。关于ENV可以看这里。
17: 设置Boost_REALPATH的值为ON,具体用途暂不详。
18: 如果编译软件使用了外部库,事先并不知道它的头文件和链接库的位置。得在编译命令中加上包含它们的查找路径。CMake使用 find_package 命令来解决这个问题。本句的意思就是找到Boost库。指定了COMPONENTS参数,在它们的后面可以列出一些与包相关(依赖)的部件清单(components list),这条语句中包括了program_options(C++解析命令行选项的库,详情看这里)和serialization(归档库,详情看这里)。指定了REQUIRED参数,如果没有找到后边的包,将会报致命错误,然后配置步骤终止执行(详情看这里)。
19: include_directories命令的意思是指定头文件的搜索路径,相当于指定gcc的-I参数。Boost_INCLUDE_DIR是包含Boost的headers的路径。这条命令的意思应该是将Boost的headers的路径纳入当前编译的搜索路径。
20: set(<variable> <value1> ... <valueN>)的意思是<variable>被设置为一个由各个值之间由分号分隔的list(详见这里)。Boost_LIBRARIES指的是Boost的组件库名,用于链接到目标程序。这条命令的意思是将LIBS的值设置为LIBS和Boost_LIBRARIES组成的list(详见这里和这里)。
23: 找到Eigen3库
24: 指定EIGEN3_INCLUDE_DIR进入头文件的搜索路径。
26: configure_file配置文件,目的是在在代码文件中使用CMake中定义的的变量,这里注释掉了,应该是没有用到(configure_file详见这里)。
28, 29: 包含cnn/cnn和relation两个子目录 ,这样cnn/cnn和realtion目录下的CMakelists.txt文件和源代码也会被处理。