CMake教程03- 添加库的使用要求

CMake教程03- 添加库的使用要求

前面介绍了如何添加并使用库,本节更详细的介绍如何设置库的使用要求。

什么是库的使用要求呢?

使用一个库里的方法,首先要通过#include引入库的头文件,那么库的头文件所在位置就是库的使用要求之一,这次我们就来看看如何添加库的使用要求。

添加库使用要求的主要命令如下:
- target_compile_definitions()
- target_compile_options()
- target_include_directories()
- target_link_libraries()

以前面的示例为基础,项目目录结构如下:

ch03
├── CMakeLists.txt
├── config.h.in
├── hello.cpp
└── func
    ├── CMakeLists.txt
    ├── myfunc.cpp
    └── myfunc.h

我们来重新编写CMakeLists.txt文件,修改如下:

func/CMakeLists.txt文件末尾追加

target_include_directories(myfunc INTERFACE ${CMAKE_CURRENT_SOURCE_DIR)

告诉所有使用myfunc库的目标使用时需要在myfunc源码所在的目录中找头文件。

为了不重复引入库头文件目录(去掉多余的、重复的配置信息),还需要修改项目根目录的CMakeLists.txt文件:

if(USE_MYFUNC)
    add_subdirectory(func)
    list(APPEND EXTRA_LIBS myfunc)
endif()


# 添加头文件搜索目录
target_include_directories(first_app PUBLIC
    "${PROJECT_BINARY_DIR}"
    )

# 添加库
target_link_libraries(first_app PUBLIC ${EXTRA_LIBS})

删掉了list(APPEND EXTRA_INCLUDES "${PROJECT_SOURCE_DIR}/func")
"${EXTRA_INCLUDES}"这两行,因为func/库下的CMakeLists.txt文件已经定义好了使用要求了。

重新构建一次ch03项目试试:

mkdir ./build_ch03
cd ./build_ch03
cmake ../ch03 -DUSE_MYFUNC=ON

转载本文时请注明出处及本文链接地址CMake教程03- 添加库的使用要求

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注