demo1——单文件
只有一个main.cpp的情况
main.cpp
#include<iostream>
int main(int argc, char** argv)
{
std::cout<<"hellosl"<<std::endl;
return 0;
}
CMakeLists.txt
cmake_minimum_required( VERSION 2.8)
project(demo)
add_executable(demo main.cpp)
编译指令:(以下demo将不再提)
mkdir build
cd build
cmake ..
make
demo2——多文件
有main.cpp和pose.h、pose.cpp。
main.cpp
#include<iostream>
#include"pose.h"
using namespace std;
int main(int argc, char** argv)
{
for(int i=0;i<argc;i++)
{
cout<<argv[i]<<endl;
}
int answer = pose();
cout<<"---------------"<<endl;
cout<<answer<<endl;
return 0;
}
注意:int main(int argc, char** argv)
pose.cpp
#include"pose.h"
int pose()
{
int a = 6+3;
return a;
}
pose.h
#ifndef POSE_H_
#define POSE_H_
int pose();
#endif
注意:# ifndef #define #endif使用
CMakeLists.txt
cmake_minimum_required( VERSION 2.8 )
project(pose)
add_executable(pose main.cpp)
add_library(poselib pose.cpp) # 静态库
add_library(share_pose_lib SHARED pose.cpp) # 动态库
target_link_libraries(pose poselib)
注意:
1)加上add_library(poselib pose.cpp)该语句后,会在build文件夹下生成libposelib.a静态库。也可以使用,也可使用add_library(poselib STATIC pose.cpp)
2)add_library(share_pose_lib SHARED pose.cpp) # 动态库,会在build文件夹下生成libposelib.so动态库。
3)poselib和share_poselib名称不能相同
demo3——eigen
eigen.cpp
具体代码可参考:https://blog.youkuaiyun.com/weixin_41874898/article/details/121254989
CMakeLists.txt
cmake_minimum_required( VERSION 2.8 )
project(eigen_demo)
include_directories("/usr/include/eigen3")
add_executable(eigen_demo eigen.cpp)
eigen是个头文件库,只有h文件,没有cpp文件,在写cmake的时候,只有包含头文件include_directories,不用target_link_libraries。
demo4——sophus
sophus_demo.cpp
具体代码可参考:https://blog.youkuaiyun.com/weixin_41874898/article/details/121270562
CMakeLists.txt
cmake_minimum_required(VERSION 2.8)
project(sophus_demo)
# 为使用 sophus,您需要使用find_package命令找到它
find_package( Sophus REQUIRED)
include_directories(${Sophus_INCLUDE_DIRS})
add_executable(sophus_demo sophus_demo.cpp)
target_link_libraries(sophus_demo ${Sophus_LIBRARIES})