CMake共享库:如何为DLL和LIB文件指定不同的输出目录?

时间:2018-10-30 21:11:39

标签: cmake

背景

给出我使用CMake创建的共享库:

add_library(SharedLib SHARED sharedlib.cpp shared_exports.h)
target_include_directories(SharedLib PUBLIC ${PROJECT_SOURCE_DIR}/src/libshared)
include(GenerateExportHeader)
GENERATE_EXPORT_HEADER(SharedLib
    EXPORT_MACRO_NAME SHARED_EXPORTS
    EXPORT_FILE_NAME ${PROJECT_SOURCE_DIR}/src/libshared/shared_exports.h)

它将创建5个文件:

SharedLib.dll SharedLib.exp 共享库 共享库 SharedLib.pdb

哪个很棒。所有输出文件都转到我在全局CMakeLists.txt中指定的目录。

问题

但是我想单独指定DLL及其对应的PDB文件进入我的主构建目录中的其他位置。 (将.lib文件保留在其中)

我尝试了以下多种组合:

set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)

使用不同的变量,这让我很头疼。 我该怎么做?

2 个答案:

答案 0 :(得分:1)

不同构建工件的输出目录由不同的CMake 变量(以及相应的属性)控制:

示例:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/pdb)

add_library(SharedLib SHARED sharedlib.cpp shared_exports.h)

答案 1 :(得分:0)

我发现这可行:

# Top level CMakeLists.txt file:

set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/bin)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR})
set(LIBRARY_OUTPUT_PATH    ${CMAKE_BINARY_DIR}/lib)

在我的 src / libShared / CMakeLists.txt 文件中,我必须在调用set

之前放置add_library命令
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH})
add_library(SharedLib SHARED sharedlib.cpp shared_exports.h)

否则,我发现了困难的方法,可以像这样在调用add_library之后设置属性:

set_target_properties(SharedLib PROPERTIES
    RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH}
)