- 1.add_library
- 2.add_executable
- 3.编译步骤
- 4.作者答疑
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.作者答疑合理的脚本代码可以有效的提高工作效率,减少重复劳动。