编写CMakeLists

编写CMakeLists.txt

https://www.cnblogs.com/fariver/p/6498495.html

编写CMakeLists.txt

编写通用的CMakeList.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8.3)
#set a variable name ProjectName 
set(ProjectName myproject)
project(${ProjectName})

file(GLOB_RECURSE all_files "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")

message("cmake:USE_xxxlib on")
include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include/" /opt/xxxx/mkl/include)
#include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include/" ${CMAKE_CURRENT_SOURCE_DIR}/3rdparty/xxx/include)
        
#find opencv lib
find_package(OpenCV REQUIRED)

#check out compiler type and add compiler option
if(${CMAKE_COMPILER_IS_GNUCC})
    message (STATUS "add c++11 flags")
    add_definitions(-Wall -s -std=c++11 -g)
endif()

# add lib path
link_directories(/opt/xxxx/mkl/lib/intel64)

#add all *.cpp source code together and compile them to object
add_executable(${ProjectName} ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp ${all_files}) 

#link your object with 3rdparty library
#you can link them with full path name or just prefix name of lib
target_link_libraries(${ProjectName} ${OpenCV_LIBS} mkl_intel_lp64 mkl_sequential mkl_core)
#target_link_libraries(${ProjectName} ${LIB}/librefblas.a )
#target_link_libraries(${ProjectName} /usr/lib/x86_64-linux-gnu/libgfortran.so.3 )
#target_link_libraries(${ProjectName} lapack blas)

编写多级CMakeList.txt

ls
3rdparty  bin  build.sh  CMakeLists.txt  Desktop.ini  log.txt  README.md  resource  src

顶层CMakeLists.txt

cmake_minimum_required(VERSION 2.8)
#project name
project(myproject)
set(PROJECT_NAME myproject)

#define ROOT_SOURCE_DIR      //it will be used in subdirectory CMakeLists.txt
set(ROOT_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})

#add subdirectory  // it must contain a CMakelists.txt in subdirectory
add_subdirectory(src)
add_subdirectory(3rdparty)

CMakelists.txt in src directory

cmake_minimum_required(VERSION 2.8)
project(main)

#define path
set(LIBRARY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
#set(LIBRARY_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR} ${ROOT_SOURCE_DIR}/3rdparty/roptlib)

#option
option(USE_OPENBLAS "Use openblas" OFF)
option(USE_MKL "Use mkl" ON)

#find opencv module
find_package(OpenCV REQUIRED)

FIND_PACKAGE(OpenMP)
  IF(OPENMP_FOUND)
    MESSAGE(STATUS "Compiling with OpenMP support")
    SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${OpenMP_C_FLAGS}")
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}")
    SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${OpenMP_EXE_LINKER_FLAGS}")
  ENDIF(OPENMP_FOUND)

# define out path
SET(EXECUTABLE_OUTPUT_PATH ${ROOT_SOURCE_DIR}/bin)

# add roptlib/*.h path
message("cmake:USE_ROPTLIB on")
include_directories(
    ${LIBRARY_SOURCE_DIR}
    ${ROOT_SOURCE_DIR}/3rdparty/roptlib
)

if(USE_MKL)
message("cmake:USE_MKL on")
include_directories(
    ${LIBRARY_SOURCE_DIR}
    /opt/xxxx/mkl/include    
)
# add lib path
link_directories(/opt/xxxx/mkl/lib/intel64)
endif (USE_MKL)

if(USE_OPENBLAS)
message("cmake:USE_OPENBLAS on")
include_directories(
    ${LIBRARY_SOURCE_DIR}
    ${ROOT_SOURCE_DIR}/3rdparty/openblas/include
)
# add lib path
link_directories(${ROOT_SOURCE_DIR}/3rdparty/openblas/lib)
endif (USE_OPENBLAS)

#add all *.cpp file into DIR_SRCS
AUX_SOURCE_DIRECTORY(. DIR_SRCS )
AUX_SOURCE_DIRECTORY(${ROOT_SOURCE_DIR}/3rdparty/roptlib DIR_SRCS )
 
add_executable(main ${DIR_SRCS})
# create main2 lib
ADD_LIBRARY(main2 ${DIR_SRCS})

# link the libraries you need to object
if(USE_MKL)
target_link_libraries(main ${OpenCV_LIBS} mkl_intel_lp64 mkl_sequential mkl_core)
endif (USE_MKL)

if(USE_OPENBLAS)
target_link_libraries(main ${OpenCV_LIBS} openblas)
endif (USE_OPENBLAS)

reference
学习cmake

cmake编译后gdb调试

如何对cmake .. 然后生成的makefile 生成的可执行文件进行gdb调试呢?
在一次cmake ..之后,系统会生成一个CMakeCache.txt文件,打开该文件之后会找到一个CMAKE_CXX_FLAGS:STRING=的选项,在其后加-g,再cmake .. && make 之后 生成的文件就可被单步调试了。

cmake需要编译的源码中含有.cu文件时,需要nvcc来编译

cuda_add_executable(cu_exec ${head_files} ${cu_files})
cuda_add_executable(cu_exec ${head_files} ${cu_files})

reference1
reference2

分类: Linux

### 回答1: 编写cmakelists.txt文件是为了使用CMake构建项目。CMake是一个跨平台的构建工具,可以自动生成Makefile或Visual Studio项目文件等。在编写cmakelists.txt文件时,需要指定项目名称、源文件、头文件、库文件等信息,并设置编译选项和链接选项。通过CMake生成的构建文件,可以方便地编译和链接项目,从而生成可执行文件或库文件。 ### 回答2: CMake是一个跨平台的编译工具,可以用来自动生成编译脚本,例如makefile,在编译程序时免去手动编写这些脚本的麻烦。CMake编写配置文件有两种方式:GUI界面和cmakelists文件。在本文中我将详细介绍如何编写cmakelists.txt文件,为大家提供帮助。 CMakeLists.txt是CMake的核心文件。通过CMakeLists.txt,我们可以定义程序相关的环境变量、编译选项、依赖关系、源文件和编译器等。下面我们来详细地了解一下CMakeLists.txt的编写方法: 1. CMakeLists.txt文件格式 在开始编写CMakeLists.txt文件之前,需要先了解该文件的格式规则。CMakeLists.txt文件由一个或多个命令语句组成,每条语句占据一行。注释以井号(#)开头。 2. 命令语句 下面是CMakeLists.txt常用命令语句的说明: cmake_minimum_required(VERSION x.x.x):指定CMake的最低版本号。 project(project_name):指定项目名称。 set(variable value):设置变量的值。 include_directories(directory):添加头文件目录。 add_subdirectory(directory):添加子目录。 add_executable(target sources):编译可执行文件。 add_library(target sources):编译库文件。 target_link_libraries(target libraries):用于连接库文件。 install(TARGETS targets DESTINATION destination):指定安装目录。 install(DIRECTORY directory DESTINATION destination):指定安装目录。 3. 编写CMakeLists.txt 下面以编写一个C++的Hello World程序为例来说明CMakeLists.txt的编写方法。我们假设该程序的源文件名为hello.cpp。 首先,我们需要指定项目名称和CMake的最低版本号: cmake_minimum_required(VERSION 3.1) project(hello) 下一步,我们需要添加头文件目录和源文件: include_directories(${CMAKE_CURRENT_SOURCE_DIR}) add_executable(hello hello.cpp) 最后,我们需要添加库文件和安装目录: target_link_libraries(hello) install(TARGETS hello DESTINATION bin) 到此,我们完成了CMakeLists.txt文件的编写。 4. 编译 最后,我们需要运行CMake程序来生成makefile文件,然后运行make来编译我们的程序。具体步骤如下: mkdir build && cd build cmake .. make 运行完以上命令,我们会在build目录中生成可执行文件hello,并且通过make install命令可以将程序安装到指定目录。 ### 回答3: CMake是一个跨平台的编译工具,可以用于编译各种不同的程序,包括C++程序、Java程序等等。在使用CMake编写程序时,需要配置一个CMakeLists.txt文件,该文件可以指定程序的一些基本信息,例如编译器、源文件、链接库等等。下面是CMakeLists.txt文件编写的基本步骤: 1. 创建一个项目名称:在CMakeLists.txt文件中,首先要指定项目名称,可以使用project命令来指定项目名称,如下所示: project(myproject) 2. 设定编译器:在CMakeLists.txt文件中,可以使用set命令来设定编译器,如下所示: set(CMAKE_CXX_COMPILER g++) # C++编译器 3. 指定源文件:在CMakeLists.txt文件中,可以使用add_executable或add_library命令来指定源文件,如下所示: add_executable(myproject main.cpp) # 指定源文件 4. 添加包含目录:在CMakeLists.txt文件中,可以使用include_directories命令来添加包含目录,如下所示: include_directories(include) # 添加包含目录 5. 添加链接库:在CMakeLists.txt文件中,可以使用target_link_libraries命令来添加链接库,如下所示: target_link_libraries(myproject lib1 lib2) # 添加链接库 以上就是CMakeLists.txt文件编写的基本步骤。需要注意的是,CMakeLists.txt文件的编写可能会因项目的不同而有所差异,需要根据具体的项目需求进行调整和修改。同时,可以参考CMake官方文档、相关书籍和网站,获得更多关于CMakeLists.txt文件编写的详细信息和实践经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值