给出我使用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)
使用不同的变量,这让我很头疼。 我该怎么做?
答案 0 :(得分:1)
不同构建工件的输出目录由不同的CMake 变量(以及相应的属性)控制:
.dll
-CMAKE_RUNTIME_OUTPUT_DIRECTORY .lib
-CMAKE_ARCHIVE_OUTPUT_DIRECTORY .pdb
-CMAKE_COMPILE_PDB_OUTPUT_DIRECTORY 示例:
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}
)