提问人:Nico Cano 提问时间:11/9/2023 更新时间:11/9/2023 访问量:33
我的库没有转到 cmake 中的指定目录
My libraries aren't going to the specified directory in cmake
问:
我正在创建一个库,它工作正常,但我指定了要在目录“${CMAKE_CURRENT_SOURCE_DIR}/Build/MSVC/bin”上创建的库,但正在名为 lib{ProyectName}.lib 的构建文件夹上创建(它不应该有 lib 前缀) 这是我的CMakeLists:
cmake_minimum_required(VERSION 3.26)
add_definitions(-DUNICODE -D_UNICODE)
project(AxoSerial-MSVC)
set(CMAKE_CXX_STANDARD 17)
add_library(AxoSerial-MSVC STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/AxoSerial.cpp)
target_include_directories(AxoSerial-MSVC PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set_target_properties(AxoSerial-MSVC
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Build/MSVC/bin"
CMAKE_CXX_COMPILER "C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.29.30133/bin/HostX64/x64/cl.exe"
SUFFIX ".lib"
)
project(AxoSerial-MinGW)
set(CMAKE_CXX_STANDARD 17)
add_library(AxoSerial-MinGW STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/AxoSerial.cpp
main.cpp)
target_include_directories(AxoSerial-MinGW PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)
set_target_properties(AxoSerial-MinGW
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Build/MSVC/bin"
CMAKE_CXX_COMPILER g++
SUFFIX ".lib"
)
project(main)
set(CMAKE_CXX_STANDARD 17)
add_executable(main main.cpp)
target_link_libraries(main PRIVATE AxoSerial-MSVC)
target_include_directories(main PUBLIC ${CMAKE_SOURCE_DIR}/include)
这是我的目录树:
C:.
│ CMakeLists.txt
│ main.cpp
│
├───.idea
│ .gitignore
│ .name
│ AxoSerial.iml
│ misc.xml
│ modules.xml
│ workspace.xml
│
├───Build
│ │ .ninja_deps
│ │ .ninja_log
│ │ build.ninja
│ │ CMakeCache.txt
│ │ cmake_install.cmake
│ │ libAxoSerial-MinGW.lib
│ │ libAxoSerial-MSVC.lib
│ │ main.exe
│ │
│ ├───.cmake
│ │ └───api
│ │ └───v1
│ │ ├───query
│ │ │ cache-v2
│ │ │ cmakeFiles-v1
│ │ │ codemodel-v2
│ │ │ toolchains-v1
│ │ │
│ │ └───reply
│ │ cache-v2-41e28885b8099980ddf6.json
│ │ cmakeFiles-v1-4dd9e73c28e719aace8b.json
│ │ codemodel-v2-c699778468e6a4bb9941.json
│ │ directory-.-Debug-d0094a50bb2071803777.json
│ │ index-2023-11-09T02-34-15-0214.json
│ │ target-AxoSerial-MinGW-Debug-a763cdb921b125cef898.json
│ │ target-AxoSerial-MSVC-Debug-bb5afb7fe9924aefe8ab.json
│ │ target-main-Debug-503dda660556d3767039.json
│ │ toolchains-v1-af93b67b788c93364498.json
│ │
│ ├───CMakeFiles
│ │ │ clion-Debug-log.txt
│ │ │ clion-environment.txt
│ │ │ cmake.check_cache
│ │ │ CMakeConfigureLog.yaml
│ │ │ rules.ninja
│ │ │ TargetDirectories.txt
│ │ │
│ │ ├───3.26.4
│ │ │ │ CMakeCCompiler.cmake
│ │ │ │ CMakeCXXCompiler.cmake
│ │ │ │ CMakeDetermineCompilerABI_C.bin
│ │ │ │ CMakeDetermineCompilerABI_CXX.bin
│ │ │ │ CMakeRCCompiler.cmake
│ │ │ │ CMakeSystem.cmake
│ │ │ │
│ │ │ ├───CompilerIdC
│ │ │ │ │ a.exe
│ │ │ │ │ CMakeCCompilerId.c
│ │ │ │ │
│ │ │ │ └───tmp
│ │ │ └───CompilerIdCXX
│ │ │ │ a.exe
│ │ │ │ CMakeCXXCompilerId.cpp
│ │ │ │
│ │ │ └───tmp
│ │ ├───AxoSerial-MinGW.dir
│ │ │ │ main.cpp.obj
│ │ │ │
│ │ │ └───src
│ │ │ AxoSerial.cpp.obj
│ │ │
│ │ ├───AxoSerial-MSVC.dir
│ │ │ └───src
│ │ │ AxoSerial.cpp.obj
│ │ │
│ │ ├───main.dir
│ │ │ main.cpp.obj
│ │ │
│ │ └───pkgRedirects
│ ├───MinGW
│ │ └───bin
│ ├───MSVC
│ │ └───bin
│ └───Testing
│ └───Temporary
│ LastTest.log
│
├───include
│ AxoSerial.h
│
└───src
AxoSerial.cpp
从代码中可以看出,我尝试过:
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/Build/MSVC/bin"
答:
0赞
RAM
11/9/2023
#1
从您的示例中,您设置希望您的库将被转储到其中。RUNTIME_OUTPUT_DIRECTORY
快速查看 RUNTIME_OUTPUT_DIRECTORY
上 CMake 的文档页面,我们发现该变量用于指定一个路径,其角色是“用于构建 RUNTIME 目标文件的输出目录”。
如果你点击RUNTIME的链接,你会偶然发现这个定义:
buildsystem 目标的运行时输出工件可能是:
- 由 add_executable() 命令创建的可执行目标的可执行文件(例如 .exe)。
- 在 DLL 平台上:由 add_library() 命令和 SHARED 选项创建的共享库目标的可执行文件(例如 .dll)。
知道了这一点,如果你看一下你的示例,你会注意到你所有的库目标都是作为库而不是库创建的。STATIC
SHARED
(...)
add_library(AxoSerial-MSVC STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/AxoSerial.cpp)
(...)
add_library(AxoSerial-MinGW STATIC ${CMAKE_CURRENT_SOURCE_DIR}/src/AxoSerial.cpp
main.cpp)
(...)
希望这会有所帮助。
评论
0赞
Nico Cano
11/10/2023
我已经使用@Tsyvarev所说的解决了目录问题,但现在我仍然有 lib 前缀问题,我该怎么做才能解决它?
评论
ARCHIVE_OUTPUT_DIRECTORY
lib
CMAKE_CXX_COMPILER
CMAKE_CXX_COMPILER
${CMAKE_CURRENT_SOURCE_DIR}/Build/MSVC/bin
${CMAKE_CURRENT_BINARY_DIRECTORY}
CMAKE_CXX_COMPILER