标准cmake模板(将源文件做成库)

在多级目录下,工程目录的CMakeList.txt的模板,
  cmake_minimum_required( VERSION 2.8 )
project( guoguo )

# 设置用debug还是release模式。debug允许断点,而release更快
#set( CMAKE_BUILD_TYPE Debug )
set( CMAKE_BUILD_TYPE Release )

# 设置编译选项
# 允许c++11标准、O3优化、多线程。match选项可避免一些cpu上的问题
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -pthread" )

# 常见依赖库:cv, eigen, pcl
find_package( OpenCV REQUIRED )
#find_package( Eigen3 REQUIRED )
#find_package( PCL 1.7 REQUIRED )

#include_directories(${PCL_INCLUDE_DIRS})
#link_directories(${PCL_LIBRARY_DIRS})
#add_definitions(${PCL_DEFINITIONS})

# 二进制文件输出到bin
set( EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin )
# 库输出到lib
set( LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib )

# 头文件目录
include_directories(
    ${PROJECT_SOURCE_DIR}/include
    )

# 源文件目录
add_subdirectory( ${PROJECT_SOURCE_DIR}/src/ )
add_subdirectory( ${PROJECT_SOURCE_DIR}/experiment/ )  

这样就会将可执行文件放入bin文件夹,将产生的库文件放入lib文件夹中,还要就是添加子目录的时候,一定要保证目录里面继续包含CMakeLists.txt,要不然会报错。还有include_directories()必须加上,如果不加就会提示找不到头文件。
在src文件夹中存放的是源文件和CMakeLists.txt,同时你可以在这个cmakelists.txt中进行设置,把源文件做成库文件。

set(Lib_src hello.cpp)
add_library(libhello ${Lib_src})
set_target_properties(libhello PROPERTIES OUTPUT_NAME "hello")
最后一行是为了将.a库文件名字改成.libhello的名字,如果不加这一句就会是liblibhello.a
那么在你放main函数的.cpp文件,我们暂时可以把这个文件夹定义为experience,那么这个文件夹中就包含.cpp文件和cmakelists.txt文件,其中的cmakelists
add_executable(hello main.cpp)
target_link_libraries(hello libhello)
因为我这里引用的库文件,所以要包含
target_link_libraries(hello libhello)

`
当然我们也可以不引用库文件,因为我们手中拥有这它的头文件和源文件,多么质朴的东西,当然可以直接使用啦。

include_directories(${PROJECT_SOURCE_DIR}/include)

add_executable(hello main.cpp ${PROJECT_SOURCE_DIR}/src/hello.cpp)

当然加上头文件的目录啦,然后详细的列好所有需要用到的.cpp文件的路径。
这样你就做好了。
当然如果你想生成动态库文件只需要在src 中改一点点如:

add_library(libhello SHARED ${LIB_SRC})

对,就是加了SHARE 是不是很简单。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

城墙郭外斜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值