Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake创建具有不同定义的共享和静态库_Cmake - Fatal编程技术网

CMake创建具有不同定义的共享和静态库

CMake创建具有不同定义的共享和静态库,cmake,Cmake,我想使用CMake创建一个静态库和一个共享库来创建构建环境。此外,它应该创建一个ANSI和一个UNICODE版本 我发现这个帖子: 这告诉我,我可以使用多个add_library语句来实现这一点。当我尝试它时,它可以很好地创建库,但是帖子没有告诉我如何根据构建的版本设置不同的-D选项 我的CMakeLists.txt当前看起来如下: list(APPEND SUPPORT_SOURCE dll_main.cpp ) add_definitions(-DBUILD_SUPPORT_DLL

我想使用CMake创建一个静态库和一个共享库来创建构建环境。此外,它应该创建一个
ANSI
和一个
UNICODE
版本

我发现这个帖子:

这告诉我,我可以使用多个
add_library
语句来实现这一点。当我尝试它时,它可以很好地创建库,但是帖子没有告诉我如何根据构建的版本设置不同的
-D
选项

我的
CMakeLists.txt
当前看起来如下:

list(APPEND SUPPORT_SOURCE
    dll_main.cpp
)

add_definitions(-DBUILD_SUPPORT_DLL)

add_library(support SHARED ${SUPPORT_SOURCE} )
add_library(support_s STATIC ${SUPPORT_SOURCE} )
add_library(support_u SHARED ${SUPPORT_SOURCE} )
add_library(support_su STATIC ${SUPPORT_SOURCE} )
毕竟,当我构建DLL时,函数需要
\uuu declspec(dllexport)
声明,而在静态版本中它不应该这样做。此外,要构建
UNICODE
变量,我需要传递
-DUNICODE

因此,我需要知道构建的是哪个版本,并为不同的目标使用适当的构建标志


我不明白的另一件事是,如何使用不同的名称创建调试构建。我通常使用模式
libname.lib
libname\u d.lib
,这样我可以在一个目录中链接所有可能的版本。

您可以使用命令为每个目标设置编译器标志。例如:

target_compile_definitions(support PRIVATE MY_SHARED_DEFINITION)
target_compile_definitions(support_s PRIVATE MY_STATIC_DEFINITION)
对于向调试库添加后缀,可以通过设置CMake变量来实现:

这将导致所有不可执行目标在内置调试时附加
\u d
。如果需要更细粒度的控制,可以为各个目标设置属性:

set_target_properties(support support_s PROPERTIES DEBUG_POSTFIX -dbg)
这将覆盖这两个目标的全局
CMAKE\u DEBUG\u后缀
值,并为它们指定一个
-dbg
后缀

set_target_properties(support support_s PROPERTIES DEBUG_POSTFIX -dbg)