我正在尝试使用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。
基于这些信息:
如果可以回答任何或所有这些问题,我将非常感激。
由于
答案 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)
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()