原创
1. 前言
在Ubuntu中对工程文件运行时,只用VSCode编译运行可能会无法链接到部分库,很容易出现:
Program" xxx " does not exist.
但是通过CMake编译就不会出现问题,所以本文介绍如何编写CMakelists。
2. 基础编法
定义CMake版本+项目名称+CMake标准+关联文件
cmake_minimum_required(VERSION 3.10)
project( project_name )
set(CMAKE_CXX_STANDARD 17)
add_executable(test main.cpp pro.h )
//pro.h
#include <iostream>
using namespace std;
class test
{
public:
test(){};
void test01(int a , int b)
{
cout << "a+b=" << a+b << endl;
};
~test(){};
};
void speak()
{
cout << "im best" << endl;
}
//main.cpp
#include "pro.h"
int main()
{
test a;
a.test01(10,20);
speak();
}
3.复杂编法
#前三个是必备的
cmake_minimum_required(VERSION 3.10)
project(project_name)
set(CMAKE_CXX_STANDARD 17)
if(UNIX)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
set(CMAKE_BUILD_RPATH "$ORIGIN")
endif(UNIX)
set(LINK_STATIC_BOOST ON)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTITHREADED ON)
include_directories(${CMAKE_SOURCE_DIR})
#链接Eigen库
find_package (Eigen3 REQUIRED NO_MODULE)
include_directories( ${EIGEN3_INCLUDE_DIRS} )
#链接BOOST库
find_package(Boost REQUIRED COMPONENTS system filesystem thread date_time iostreams serialization chrono atomic regex program_options)
include_directories(${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
#基础编法的第四部分,应用程序,链接目标库,同时链接到库的相关应用文件
add_executable(test_spatialite test_spatialite.cpp)
target_link_libraries(test_spatialite ${Boost_LIBRARIES} -lsqlite3 -lspatialite)
if(WIN32)
add_subdirectory(win)
endif(WIN32)