CMake基本用法

时间:2011-05-07 21:04:14

标签: cmake

我正在尝试使用CMake构建我的库。我正在研究CMakeLists.txt。

我希望能够做到以下几点:

我有一个名为

的目录
include
src

然后在这些内部 阿吉文件夹。 在该文件夹中是库的子文件夹。

到目前为止我收集的内容:

我需要这样做:

set(AGUI_SOURCES
src/Agui/Rectangle.cpp
src/Agui/xxx.cpp (and so on)
)

然后我认为需要这样做:

include_directories(./include)

然后我不太确定。

我知道add_library会参与,但我不确定如何。

问题是,我想创建2个选项:DLL或静态。

如果是DLL,则必须定义AGUI_BUILD_DLL。

基于这些信息:

  1. 我是在正确的轨道上吗?
  2. 如何创建选项
  3. 我在add_library中添加了什么
  4. 如果用户想要DLL版本,如何添加预处理器AGUI_BUILD_DLL?
  5. 如果可以回答任何或所有这些问题,我将非常感激。

    由于

2 个答案:

答案 0 :(得分:2)

我建议看一下CMake tutorial,其中包括添加可执行文件,库,系统内省等.cmake命令也是自我文档,所以在命令行输入时,

cmake --help-command add_library

会为您提供add_library命令的文档。您可以使用--help-commands获取所有CMake命令文档的完整列表。因此,您可以使用option命令添加用于构建共享或静态的选项,并使用add_definitions命令添加预处理器定义。

例如,

option(BUILD_SHARED "Build shared libraries" OFF)
if(BUILD_SHARED)
  add_definitions(-DAGUI_BUILD_DLL)
  add_library(agui SHARED ${AGUI_SOURCES})
else()
  add_library(agui STATIC ${AGUI_SOURCES})
endif()

您应该注意在构建库时将定义targetName_EXPORTS,因此可以在declspec逻辑中使用。这是由CMake完成的,在Unix系统上使用GCC中的可见性支持时也很有用。

答案 1 :(得分:0)

  1. 也许,不知道:)。
  2. 选项(AGUI_BUILD_DLL“构建agui DLL”OFF) 在CMakeLists.txt开头附近的某个地方。您可能希望使用ON而不是OFF - 取决于您是否希望DLL构建为默认值。
  3. 3,4

    if(AGUI_BUILD_DLL)
      add_library(agui SHARED ${AGUI_SOURCES})
      set_target_properties(agui PROPERTIES DEFINE_SYMBOL "AGUI_BUILD_DLL")
    else()
      add_library(agui STATIC ${AGUI_SOURCES})
    endif()