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文件和源代码也会被处理。

 

posted @ 2018-06-29 17:32  taolusi  阅读(724)  评论(0编辑  收藏  举报