您当前的位置: 首页 >  linux

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

CMake编译C++项目-简单范例-编译脚本-Linux

插件开发 发布时间:2022-04-30 07:23:32 ,浏览量:1

文章目录
    • 1.add_library
    • 2.add_executable
    • 3.编译步骤
    • 4.作者答疑
  在Linux下,没有非常优秀的IDE工具,程序的编译也是需要命令行,一行一行的手写,比较麻烦,比较了许多的方式,作者认为采用CMake编写脚本来控制编译的方式,非常方便,下面是编译一个动态链接库和可执行程序的例子。代码如下所示:

cmake_minimum_required (VERSION 2.6)
project (DWFCall)

#设置版本号
set(Tutorial_VERSION_MAJOR 1)
set(Tutorial_VERSION_MINOR 0)

#调试信息
#SET(CMAKE_BUILD_TYPE Debug)
#SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")
#SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")

#配置编译参数文件
configure_file (
  "${PROJECT_SOURCE_DIR}/DWFCallConfig.h.in"
  "${PROJECT_BINARY_DIR}/DWFCallConfig.h"
  )
  
#添加一个路径使得我们可以找到DWFCallConfig.h文件
include_directories("${PROJECT_SOURCE_DIR}")#包含文件路径
include_directories("${PROJECT_BINARY_DIR}")#包含文件路径
include_directories("/usr/local/include")#包含文件路径
include_directories("/usr/local/include/dwf")#包含文件路径

MESSAGE(STATUS "source path = ${PROJECT_SOURCE_DIR}.")
MESSAGE(STATUS "project name = ${PROJECT_NAME}.")

#设置链接路径
SET(LINK_PATH . "/usr/local/lib")

#链接库命令
link_directories(${LINK_PATH})#链接库路径

#编译选项
add_compile_options(-fexec-charset=utf-8 -finput-charset=utf-8)

#链接库文件
SET(SRC_CODE DWFExport.cpp ACADPrintScript.cpp ADwfAlg.cpp)
SET(EXE_NAME "t")
MESSAGE(${SRC_CODE})

SET(CMAKE_EXE_LINKER_FLAGS '-Wl,-rpath=/usr/local/lib')
add_library(${PROJECT_NAME} SHARED ${SRC_CODE})#编译库
target_link_libraries(${PROJECT_NAME} "libdwfcore-1.7.0.so" "libdwftk-7.7.0.so" "libiconv.so" dl)
#target_link_libraries(${PROJECT_NAME} "libdwfcore-1.7.0.so" "libdwftk-7.7.0.so" "libiconv.a")
add_executable(${EXE_NAME} DWFReadWriterProject.cpp)#编译可执行文件
target_link_libraries(${EXE_NAME} "libDWFCall.so" "libdwfcore-1.7.0.so" "libdwftk-7.7.0.so" "libiconv.so" dl)
#target_link_libraries(${EXE_NAME} "libDWFCall.so" "libdwfcore-1.7.0.so" "libdwftk-7.7.0.so" "libiconv.a")

  详细解释请查看注释,如果脚本命令的含义不清楚,可以网上搜索下。先阐述几个常用参数含义:

1.add_library

该指令的主要作用就是将指定的源文件生成链接文件,然后添加到工程中去。该指令常用的语法如下:   add_library( [STATIC | SHARED | MODULE]    [EXCLUDE_FROM_ALL]   [source1] [source2] […])   其中表示库文件的名字,该库文件会根据命令里列出的源文件来创建。而STATIC、SHARED和MODULE的作用是指定生成的库文件的类型。STATIC库是目标文件的归档文件,在链接其它目标的时候使用。SHARED库会被动态链接(动态链接库),在运行时会被加载。MODULE库是一种不会被链接到其它目标中的插件,但是可能会在运行时使用dlopen-系列的函数。默认状态下,库文件将会在于源文件目录树的构建目录树的位置被创建,该命令也会在这里被调用。而语法中的source1 source2分别表示各个源文件。

2.add_executable

使用给定的源文件,为工程引入一个可执行文件。   add_executable(< name> [WIN32] [MACOSX_BUNDLE]   [EXCLUDE_FROM_ALL]   source1 source2 … sourceN)   引入一个名为< name>的可执行目标,该目标会由调用该命令时在源文件列表中指定的源文件来构建。   3.target_link_libraries:该指令的作用为将目标文件与库文件进行链接。该指令的语法如下:   target_link_libraries( [item1] [item2] […] [[debug|optimized|general] ] …)   上述指令中的是指通过add_executable()和add_library()指令生成已经创建的目标文件。而[item]表示库文件没有后缀的名字。默认情况下,库依赖项是传递的。当这个目标链接到另一个目标时,链接到这个目标的库也会出现在另一个目标的连接线上。这个传递的接口存储在interface_link_libraries的目标属性中,可以通过设置该属性直接重写传递接口。

3.编译步骤

  cd source (CMakeLists.txt 所在目录)   cmake .   make

4.作者答疑

  合理的脚本代码可以有效的提高工作效率,减少重复劳动。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0428s