CMake在哪里建立库
在windows cmake上,在中生成库 ${CMAKE_BINARY_DIR}/>/>/Libname.lib 论ubuntumate ${CMAKE_BINARY_DIR}/Libname.a 有没有办法让这条路走下去?我对这样一个完整的从路径到库的用例 详情如下:CMake在哪里建立库,cmake,Cmake,在windows cmake上,在中生成库 ${CMAKE_BINARY_DIR}/>/>/Libname.lib 论ubuntumate ${CMAKE_BINARY_DIR}/Libname.a 有没有办法让这条路走下去?我对这样一个完整的从路径到库的用例 详情如下: add_library(${LIB_NAME} STATIC ${SOURCES}) #... target_link_libraries(${PROJECT_BENCH_NAME} debug ${FULL_PATH_T
add_library(${LIB_NAME} STATIC ${SOURCES})
#...
target_link_libraries(${PROJECT_BENCH_NAME}
debug ${FULL_PATH_TO_LIB}${LIB_NAME}${CMAKE_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX })
您可以分别为可执行文件、存档库(.a/.lib)和动态库(.dll/.so)自定义输出目录,然后使用此信息链接到特定文件。你可以找到详细的解释。(您还可以按目标设置输出目录) 例如,在您的情况下,您可以设置:
您可以分别为可执行文件、存档库(.a/.lib)和动态库(.dll/.so)自定义输出目录,然后使用此信息链接到特定文件。你可以找到详细的解释。(您还可以按目标设置输出目录) 例如,在您的情况下,您可以设置:
只需使用库目标链接:
target\u link\u库(${PROJECT\u BENCH\u NAME}debug${LIB\u NAME})
。我希望完整路径避免链接到错误的版本该版本应该是CMAKE\u BINARY\u DIR中的唯一版本(除非您从同一个CMakeLists.txt编译多个版本,此时它们应该是分开的add\u library()
targets,这使得对它们的任何引用都是明确的。)CMake自动为您做了这么多好事(比如构建类型的后期修复),为什么要猜测它们?按目标名称链接提供了到正确库的链接。这不是按库名称链接。但您也可以使用:target\u link\u libraries(${PROJECT_BENCH_NAME}debug$)
@Tsyvarev实际上,这是我遇到的一个问题,因为我在Windows下使用cmake+mingw获得的.lib、.lib.a和.dll文件有些不明确。我通过定义自定义的add\u dependencies宏解决了这个问题,我确实需要生成完整的文件名。只需使用库目标链接:target\u link\u库即可(${PROJECT_BENCH_NAME}debug${LIB_NAME}
。我希望完整路径避免链接到错误的版本该版本应该是CMAKE_BINARY_DIR中唯一的版本(除非您从同一个CMakeLists.txt编译多个版本,此时它们应该是分开的add_library()
targets,这再次明确了对它们的任何引用。)CMake自动为您做了这么多好事(比如构建类型的后期修复),为什么要猜测它们?按目标名称链接提供了到正确库的链接。这不是按库名称链接。但您也可以使用:target\u link\u libraries(${PROJECT_BENCH_NAME}debug$)
@Tsyvarev实际上这是我遇到的一个问题,因为我在Windows下使用cmake+mingw获得的.lib、.lib.a和.dll文件存在一些歧义。我通过定义一个自定义的add_dependencies宏解决了这个问题,并且我确实需要生成完整的文件名。
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib/)
add_library(${LIB_NAME} STATIC ${SOURCES})
#...
target_link_libraries(${PROJECT_BENCH_NAME}
debug ${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}${LIB_NAME}${CMAKE_DEBUG_POSTFIX}${CMAKE_STATIC_LIBRARY_SUFFIX })