CMakeLists.txt 文件&范例
2018-03-19 23:28
411 查看
[align=center]CMakeLists.txt 文件[/align] 前的项目代码在src 目录。 src 下有子目录:server, utility, lib, bin, build
server----- 存放项目的主功能类文件 utility ----- 存放项目要用到相关库文件,便已成为库文件存放到子目录lib 中 lib ----- 存放utility 生成的库 bin ----- 存放association 生成的二进制文件 build ----- 编译目录,存放编译生成的中间文件
cmake 要求工程主目录和所有存放源代码子目录下都要编写CMakeLists.txt 文件,注意大小写(cm 大写,list中l 大写且落下s).
src/CMakeLists.txt 文件如下: ------------------------------------------------------------------------------------------------------------- #author: #created:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #cmake 最低版本要求,低于2.6 构建过程会被终止。 PROJECT(server_project) #定义工程名称
MESSAGE(STATUS "Project: SERVER") #打印相关消息消息 MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")
SET(CMAKE_BUILE_TYPE DEBUG) #指定编译类型 SET(CMAKE_C_FLAGS_DEBUG "-g -Wall") #指定编译器 ADD_SUBDIRECTORY(utility) #添加子目录 ADD_SUBDIRECTORY(server) -------------------------------------------------------------------------------------------------------------
相关解释: 1. CMakeLists.txt 文件中不区分大小写 2. PROJECT(project_name) 定义工程名称 语法:project(projectname [cxx] [c] [java]) 可以指定工程采用的语言,选项分别表示:C++, C, java, 如不指定默认支持所有语言 3. MESSAGE(STATUS, "Content") 打印相关消息 输出消息,供调试CMakeLists.txt 文件使用。 4. SET(CMAKE_BUILE_TYPE DEBUG) 设置编译类型debug 或者release。 debug 版会生成相关调试信息,可以使用GDB 进行 调试;release不会生成调试信息。当无法进行调试时查看此处是否设置为debug. 5. SET(CMAKE_C_FLAGS_DEBUG "-g -Wall") 设置编译器的类型 CMAKE_C_FLAGS_DEBUG ---- C 编译器 CMAKE_CXX_FLAGS_DEBUG ---- C++ 编译器 6. ADD_SUBDIRECTORY(utility) 添加要编译的子目录 为工程主目录下的存放源代码的子目录使用该命令,各子目录出现的顺序随意。 如上便是工程server_project 主目录src 下的CMakeLists.txt 文件,下一篇我们解释子目录utiltiy中的CMakeLists.txt 文件。
子目录utility 下的CMakeLists.txt 文件如下:-------------------------------------------------------------------------------------------------------------------- #Cmake file for library utility.a #Author: #Created:
SET(SOURCE_FILES #设置变量,表示所有的源文件 ConfigParser.cpp StrUtility.cpp )
INCLUDE_DIRECTORIES( #相关头文件的目录 /usr/local/include ${PROJET_SOURCE_DIR}/utility )
LINK_DIRECTORIES( #相关库文件的目录 /usr/local/lib )
ADD_LIBRARY(association ${SOURCE_FILES}) #生成静态链接库libassociation.a TARGET_LINK_LIBRARY(association core) #依赖的库文件 SET_TARGET_PROPERTIES(utility PROPERTIES #表示生成的执行文件所在路径 RUNTIME_OUTPUT_DIRECTORY> "${PROJECT_SOURCE_DIR}/lib")
-------------------------------------------------------------------------------------------------------------------- 相关解释: 1. SET(SOURCE_FILES .....) 表示要编译的源文件,所有的源文件都要罗列到此处。set 设置变量,变量名SOURCE_FILES自定义。 2. INCLUDE_DIRECTORY(...) include头文件时搜索的所有目录 变量PROJECT_SOURCE_DIR 表示工程所在的路径,系统默认的变量 3. LINK_DIRECTORIES(...) 库文件存放的目录,在程序连接库文件的时候要再这些目录下寻找对应的库文件 4.
4000
ADD_LIBRARY(...) 表示生成静态链接库libassociaiton.a,由${PROJECT_SOURCE_DIR}代表的文件生成。 语法:ADD_LIBRARY(libname [SHARED|STATIC] SHARED 表示生成动态库, STATIC表示生成静态库。 5. TARGET_LINK_LIBRARY(association core) 表示库association 依赖core库文件 6. SET_TARGET_PROPERTIES 设置编译的库文件存放的目录,还可用于其他属性的设置。如不指定, 生成的执行文件在当前编译目录下的各子目录下的build目录下,好拗口!简单一点: 如指定在: ./src/lib 下 不指定在: ./src/build/utility/build 目录下 生成的中间文件在./src/build/utilty/build 目录下,不受该命令额影响
子目录server 下的CMakeLists.txt 文件: -------------------------------------------------------------------------------------------- SET(SOURCE_FILES Gassociation.cpp ConfigurationHandler.cpp )
INCLUDE_DIRECTORIES( /usr/local/include ${PROJECT_SOURCE_DIR}/utility ${PROJECT_SOURCE_DIR}/association )
LINK_LIBRARIES( /usr/local/lib ${PROJECT_SOURCE_DIR}/lib )
ADD_EXECUTABLE(server ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(server utility ) SET_TARGET_PROPERTIES(server PROPERTIES #表示生成的执行文件所在路径 RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin") ------------------------------------------------------------------------------------------------------- 相关解释: 1. ADD_EXECUTABLE() #指定要生成的执行文件的名称server 其他用法同utilty/CMakeLists.txt 2. SET_TARGET_PROPERTIES 设置生成的执行文件存放的路径, 注意: 执行文件server 依赖的子目录utility 子目录生成的静态库libutility.a,在指定的时候要写成: TARGET_LINK_LIBRARIES(server utility) 而不能写成: TARGET_LINK_LIBRARIES(server libutility.a) 否则编译总会提示找不到libutility库文件。 但使用第三方的库却要指定成具体的库名,如:libACE-6.0.0.so 这一点很诡异,暂时还没找到原因。
完成对应的CMakeLists.txt 文件编写后,便可以进行编译了。 编译: 进入 ./src/build 执行cmake .. make
[align=center]Cmakelist范例[/align] SET(PROJECT_NAME Sophus)
server----- 存放项目的主功能类文件 utility ----- 存放项目要用到相关库文件,便已成为库文件存放到子目录lib 中 lib ----- 存放utility 生成的库 bin ----- 存放association 生成的二进制文件 build ----- 编译目录,存放编译生成的中间文件
cmake 要求工程主目录和所有存放源代码子目录下都要编写CMakeLists.txt 文件,注意大小写(cm 大写,list中l 大写且落下s).
src/CMakeLists.txt 文件如下: ------------------------------------------------------------------------------------------------------------- #author: #created:
CMAKE_MINIMUM_REQUIRED(VERSION 2.8) #cmake 最低版本要求,低于2.6 构建过程会被终止。 PROJECT(server_project) #定义工程名称
MESSAGE(STATUS "Project: SERVER") #打印相关消息消息 MESSAGE(STATUS "Project Directory: ${PROJECT_SOURCE_DIR}")
SET(CMAKE_BUILE_TYPE DEBUG) #指定编译类型 SET(CMAKE_C_FLAGS_DEBUG "-g -Wall") #指定编译器 ADD_SUBDIRECTORY(utility) #添加子目录 ADD_SUBDIRECTORY(server) -------------------------------------------------------------------------------------------------------------
相关解释: 1. CMakeLists.txt 文件中不区分大小写 2. PROJECT(project_name) 定义工程名称 语法:project(projectname [cxx] [c] [java]) 可以指定工程采用的语言,选项分别表示:C++, C, java, 如不指定默认支持所有语言 3. MESSAGE(STATUS, "Content") 打印相关消息 输出消息,供调试CMakeLists.txt 文件使用。 4. SET(CMAKE_BUILE_TYPE DEBUG) 设置编译类型debug 或者release。 debug 版会生成相关调试信息,可以使用GDB 进行 调试;release不会生成调试信息。当无法进行调试时查看此处是否设置为debug. 5. SET(CMAKE_C_FLAGS_DEBUG "-g -Wall") 设置编译器的类型 CMAKE_C_FLAGS_DEBUG ---- C 编译器 CMAKE_CXX_FLAGS_DEBUG ---- C++ 编译器 6. ADD_SUBDIRECTORY(utility) 添加要编译的子目录 为工程主目录下的存放源代码的子目录使用该命令,各子目录出现的顺序随意。 如上便是工程server_project 主目录src 下的CMakeLists.txt 文件,下一篇我们解释子目录utiltiy中的CMakeLists.txt 文件。
子目录utility 下的CMakeLists.txt 文件如下:-------------------------------------------------------------------------------------------------------------------- #Cmake file for library utility.a #Author: #Created:
SET(SOURCE_FILES #设置变量,表示所有的源文件 ConfigParser.cpp StrUtility.cpp )
INCLUDE_DIRECTORIES( #相关头文件的目录 /usr/local/include ${PROJET_SOURCE_DIR}/utility )
LINK_DIRECTORIES( #相关库文件的目录 /usr/local/lib )
ADD_LIBRARY(association ${SOURCE_FILES}) #生成静态链接库libassociation.a TARGET_LINK_LIBRARY(association core) #依赖的库文件 SET_TARGET_PROPERTIES(utility PROPERTIES #表示生成的执行文件所在路径 RUNTIME_OUTPUT_DIRECTORY> "${PROJECT_SOURCE_DIR}/lib")
-------------------------------------------------------------------------------------------------------------------- 相关解释: 1. SET(SOURCE_FILES .....) 表示要编译的源文件,所有的源文件都要罗列到此处。set 设置变量,变量名SOURCE_FILES自定义。 2. INCLUDE_DIRECTORY(...) include头文件时搜索的所有目录 变量PROJECT_SOURCE_DIR 表示工程所在的路径,系统默认的变量 3. LINK_DIRECTORIES(...) 库文件存放的目录,在程序连接库文件的时候要再这些目录下寻找对应的库文件 4.
4000
ADD_LIBRARY(...) 表示生成静态链接库libassociaiton.a,由${PROJECT_SOURCE_DIR}代表的文件生成。 语法:ADD_LIBRARY(libname [SHARED|STATIC] SHARED 表示生成动态库, STATIC表示生成静态库。 5. TARGET_LINK_LIBRARY(association core) 表示库association 依赖core库文件 6. SET_TARGET_PROPERTIES 设置编译的库文件存放的目录,还可用于其他属性的设置。如不指定, 生成的执行文件在当前编译目录下的各子目录下的build目录下,好拗口!简单一点: 如指定在: ./src/lib 下 不指定在: ./src/build/utility/build 目录下 生成的中间文件在./src/build/utilty/build 目录下,不受该命令额影响
子目录server 下的CMakeLists.txt 文件: -------------------------------------------------------------------------------------------- SET(SOURCE_FILES Gassociation.cpp ConfigurationHandler.cpp )
INCLUDE_DIRECTORIES( /usr/local/include ${PROJECT_SOURCE_DIR}/utility ${PROJECT_SOURCE_DIR}/association )
LINK_LIBRARIES( /usr/local/lib ${PROJECT_SOURCE_DIR}/lib )
ADD_EXECUTABLE(server ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(server utility ) SET_TARGET_PROPERTIES(server PROPERTIES #表示生成的执行文件所在路径 RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin") ------------------------------------------------------------------------------------------------------- 相关解释: 1. ADD_EXECUTABLE() #指定要生成的执行文件的名称server 其他用法同utilty/CMakeLists.txt 2. SET_TARGET_PROPERTIES 设置生成的执行文件存放的路径, 注意: 执行文件server 依赖的子目录utility 子目录生成的静态库libutility.a,在指定的时候要写成: TARGET_LINK_LIBRARIES(server utility) 而不能写成: TARGET_LINK_LIBRARIES(server libutility.a) 否则编译总会提示找不到libutility库文件。 但使用第三方的库却要指定成具体的库名,如:libACE-6.0.0.so 这一点很诡异,暂时还没找到原因。
完成对应的CMakeLists.txt 文件编写后,便可以进行编译了。 编译: 进入 ./src/build 执行cmake .. make
[align=center]Cmakelist范例[/align] SET(PROJECT_NAME Sophus)
PROJECT(${
PROJECT_NAME
})
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
SET (CMAKE_VERBOSE_MAKEFILE ON)
#Release by default
#Turn on Debug with "-DCMAKE_BUILD_TYPE=Debug"
IF( NOT CMAKE_BUILD_TYPE )
SET( CMAKE_BUILD_TYPE Release )
ENDIF()
IF (CMAKE_COMPILER_IS_GNUCXX )
SET(CMAKE_CXX_FLAGS_DEBUG
"-O0 -g"
)
SET(CMAKE_CXX_FLAGS_RELEASE
" 194a2 -O3 -DNDEBUG "
)
ADD_DEFINITIONS("-Wall -Werror -Wno-unused-variable
-Wno-unused-but-set-variable -Wno-unknown-pragmas ")
ENDIF()
################################################################################
#Add local path for finding packages, set the local version first
set( CMAKE_MODULE_PATH "${
CMAKE_SOURCE_DIR
}/cmake_modules" )
list( APPEND CMAKE_MODULE_PATH "${
CMAKE_ROOT
}/Modules" )
################################################################################
#Create variables used for exporting in SophusConfig.cmake
set( Sophus_LIBRARIES
""
)
set( Sophus_INCLUDE_DIR ${
PROJECT_SOURCE_DIR
} )
################################################################################
include(FindEigen3.cmake)
#find_package( Eigen3 REQUIRED )
INCLUDE_DIRECTORIES( ${
EIGEN3_INCLUDE_DIR
} )
SET( Sophus_INCLUDE_DIR ${
Sophus_INCLUDE_DIR
} ${
EIGEN3_INCLUDE_DIR
} )
SET (SOURCE_DIR
"sophus"
)
SET (TEMPLATES tests
so2
se2
so3
se3
rxso3
sim3
)
SET (SOURCES ${
SOURCE_DIR
}/sophus.hpp)
FOREACH(templ ${
TEMPLATES
})
LIST(APPEND SOURCES ${
SOURCE_DIR
}/${
templ
}.hpp)
ENDFOREACH(templ)
INCLUDE_DIRECTORIES(${
INCLUDE_DIRS
})
#Added ${
SOURCES
} to executables so they show up in QtCreator (and possibly
#other IDEs).
#ADD_EXECUTABLE(test_so2 sophus/test_so2.cpp ${
SOURCES
})
#ADD_EXECUTABLE(test_se2 sophus/test_se2.cpp ${
SOURCES
})
#ADD_EXECUTABLE(test_so3 sophus/test_so3.cpp ${
SOURCES
})
#ADD_EXECUTABLE(test_se3 sophus/test_se3.cpp ${
SOURCES
})
#ADD_EXECUTABLE(test_rxso3 sophus/test_rxso3.cpp ${
SOURCES
})
#ADD_EXECUTABLE(test_sim3 sophus/test_sim3.cpp ${
SOURCES
})
#ENABLE_TESTING()
#
#ADD_TEST(test_so2 test_so2)
#ADD_TEST(test_se2 test_se2)
#ADD_TEST(test_so3 test_so3)
#ADD_TEST(test_se3 test_se3)
#ADD_TEST(test_rxso3 test_rxso3)
#ADD_TEST(test_sim3 test_sim3)
################################################################################
#Create the SophusConfig.cmake file for other cmake projects.
CONFIGURE_FILE( ${
CMAKE_CURRENT_SOURCE_DIR
}/SophusConfig.cmake.in
${
CMAKE_CURRENT_BINARY_DIR
}/SophusConfig.cmake @ONLY IMMEDIATE )
export( PACKAGE Sophus )
INSTALL(DIRECTORY sophus DESTINATION ${
CMAKE_INSTALL_PREFIX
}/include
FILES_MATCHING PATTERN
"*.hpp"
)
相关文章推荐
- 熟悉 CMake(二)—— 以一个实例说明 CMakeLists.txt 文件的编写
- 多目录工程的CmakeLists.txt编写(自动添加多目录下的文件)___适合自己参考实验,待实验模型)
- 以一个实例说明 CMakeLists.txt 文件的编写
- CMakeLists.txt文件写法(5):测试平台相关信息
- CMakeLists.txt文件写法(12):查找特定软件的安装目录
- ros中创建msg和srv文件时,配置CMakeLists.txt文件问题
- 简单的CMakeLists.txt文件
- 以一个实例说明 CMakeLists.txt 文件的编写
- CMakeLists.txt文件写法(6):要求CMake根据指定的源文件生成库文件
- ROS知识(8)----CMakeLists.txt文件编写的理解
- 多目录工程的CmakeLists.txt编写(自动添加多目录下的文件)
- 以一个实例说明 CMakeLists.txt 文件的编写
- CMakeLists.txt文件写法(7):添加查找头文件的路径
- 以一个实例说明 CMakeLists.txt 文件的编写
- CMakeLists.txt文件写法(8):添加库文件的搜索路径
- 以一个实例说明 CMakeLists.txt 文件的编写
- cocos2d-x 3.0 看到CMakeLists.txt 文件~他到底是干嘛的?
- ros中创建msg和srv文件时,配置CMakeLists.txt文件问题
- Cmake知识----编写CMakeLists.txt文件
- ROS学习(六):CMakeLists.txt 文件