CMake(
Cross-Platform-Make
)是一个开源、跨平台的软件构建工具,它使用与平台独立的配置文件来对软件编译过程进行控制,根据用户所需,生成 Makefile 或者 IDE的 project。
一、cmake动态库路径使用当前目录,方法如下:
修改文件CMakeLists.txt,使用工程路径变量PROJECT_SOURCE_DIR
cmake_minimum_required(VERSION 3.10)
project(test)
include_directories(include)
set(CMAKE_CXX_STANDARD 11)
set_target_properties(${TARGET} PROPERTIES
COMPILE_FLAGS "-pthread"
LINK_FLAGS "-pthread")
add_executable(test main.cpp test/test.cpp include/main.h include/test.h)
target_link_libraries(test ${PROJECT_SOURCE_DIR}/lib/lib1.so ${PROJECT_SOURCE_DIR}/lib/libsqlite3.so libpthread.so)
二、常用变量
PROJECT_SOURCE_DIR:工程的根目录
PROJECT_BINARY_DIR:运行cmake命令的目录,通常为${PROJECT_SOURCE_DIR}/build
PROJECT_NAME:返回通过 project 命令定义的项目名称
CMAKE_CURRENT_SOURCE_DIR:当前处理的 CMakeLists.txt 所在的路径
CMAKE_CURRENT_BINARY_DIR:target 编译目录
CMAKE_CURRENT_LIST_DIR:CMakeLists.txt 的完整路径
EXECUTABLE_OUTPUT_PATH:重新定义目标二进制可执行文件的存放位置
LIBRARY_OUTPUT_PATH:重新定义目标链接库文件的存放位置
cmake 当前编译路径_CMake 使用总结_weixin_39773239的博客-CSDN博客
文章目录声明cmake最低版本声明一个cmake工程创建库将可执行程序链接到库上设置构建类型指定编译选项指定所需要的头文件所在目录find_package使用
声明cmake最低版本
cmake_minimum_required( VERSION 2.8 )
声明一个cmake工程
project( HelloSLAM )
add_library( hello libHelloSLAM.cpp )
add_library( hello SHARED libHelloSLAM.cpp )
将可执行程序链接到库上
add_executable( useHe
CMake中有两个变量,可以获取到当前CMakeLists.txt的当前目录名(绝对路径)和当前文件的绝对路径,分别是CMAKE_CURRENT_SOURCE_DIR和CMAKE_CURRENT_LIST_FILE。
但是,有时候需要的往往是相对路径名。比如我们编写项目的一些样例,以当前文件夹的名字作为target名,同时还需要把生成的target按照上层目录名来分组,例如下列目录结构:
examples
|- base
|- string
|- CMakeLists.txt
|- bas
如果使用gcc进行单个c文件编译的时候,有时候后面会需要添加如-L -l之类的参数,如下
gcc -o testtest.c-L/usr/local/lib/ -lopencv
这里-L是制定动态库的位置,-l则是指定打算连接的动态库名字。
那么在进行项目编译的时候就需要通过cmake来通过Cmakelist.txt引导make进行项目编译。
那么就需要在cmakelists.txt文...
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
3.动态库输出路径(注意这个放在最后):
SET_TARGET_PROPERTIES(dllname PROPERTIES RUNTIME_O
Q1:Could not find a package configuration file
By not providing "FindNLOPT.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "NLOPT", but
CMake did not find one.
Could not find a package con
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})
target_link_libraries(your_project_name ${OpenCV_LIBS})
其中,`OpenCV` 是动态库的名称,`${OpenCV_INCLUDE_DIRS}` 是头文件所在的目录,`${OpenCV_LIBS}` 是库文件所在的目录。`your_project_name` 是你的项目名称。
Qt开发,报错:This application failed to start because no Qt platform plugin could be initialized.
33695
高版本Ubuntu挂载nfs文件系统报错:mount: /mnt/nfs: bad option; for several filesystems (e.g. nfs, cifs)
23397
Qt开发,报错:This application failed to start because no Qt platform plugin could be initialized.
柔道BOSS:
高版本Ubuntu挂载nfs文件系统报错:mount: /mnt/nfs: bad option; for several filesystems (e.g. nfs, cifs)
哇你是神仙吧:
嵌入式linux开发,交叉编译qt4.8.5报错:make[2]: arm-linux-ar: Command not found
面条有点辣: