如何让 CMake 查看和使用我需要的单个 DLL link & 运行 最简单的程序?
How to I get CMake to see & use a single DLL that I need to link & run the simplest program?
我有一个简单的程序和一个 DLL thirdparty.dll
我必须 link 在编译和 运行 时反对。我把它放在我的 CLion 项目的 lib/
目录中。无论我做什么,在阅读 CMake 和 SO 帖子数小时后,不,days,我尝试了很多组合,但我可以不要让 CMake 的 find_library
在 lib/
目录中直接找到位于 那里 的库。我使用了显式路径、相对路径、完整文件名、不带 .dll
的文件名,随便你怎么说,我总是得到相同的无用消息:
make[2]: *** No rule to make target 'OTHERDLL-NOTFOUND', needed by 'MyProgram.exe'. Stop.
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/MyProgram.dir/all' failed
这是 CMakeLists.txt
的相关当前摘录:
find_library(OTHERDLL NAMES thirdparty PATHS ${CMAKE_SOURCE_DIR}/lib)
add_library(OTHERDLL SHARED IMPORTED)
include_directories(include)
file(GLOB SOURCES "src/*.c")
add_executable(MyProgram ${SOURCES} src/myprogram.c)
target_link_libraries(MyProgram OTHERDLL)
在 CMake 中,您应该使用 ${...} 来调用变量,而不是
target_link_libraries(MyProgram OTHERDLL)
使用
target_link_libraries(MyProgram ${OTHERDLL})
根据 this tutorial,在组合 find_library
和 add_library
时,您应该在 add_library
调用中使用库名称(而不是完整路径),然后设置导入位置。所以:
find_library(OTHERDLL NAMES thirdparty PATHS ${CMAKE_SOURCE_DIR}/lib)
message(STATUS "find_library returned ${OTHERDLL}")
add_library(anyNameIsGood SHARED IMPORTED) #anyNameIsGood could be thirdparty for example
set_property(TARGET anyNameIsGood PROPERTY IMPORTED_LOCATION "${OTHERDLL}")
#(...)
target_link_libraries(MyProgram anyNameIsGood)
我有一个简单的程序和一个 DLL thirdparty.dll
我必须 link 在编译和 运行 时反对。我把它放在我的 CLion 项目的 lib/
目录中。无论我做什么,在阅读 CMake 和 SO 帖子数小时后,不,days,我尝试了很多组合,但我可以不要让 CMake 的 find_library
在 lib/
目录中直接找到位于 那里 的库。我使用了显式路径、相对路径、完整文件名、不带 .dll
的文件名,随便你怎么说,我总是得到相同的无用消息:
make[2]: *** No rule to make target 'OTHERDLL-NOTFOUND', needed by 'MyProgram.exe'. Stop.
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/MyProgram.dir/all' failed
这是 CMakeLists.txt
的相关当前摘录:
find_library(OTHERDLL NAMES thirdparty PATHS ${CMAKE_SOURCE_DIR}/lib)
add_library(OTHERDLL SHARED IMPORTED)
include_directories(include)
file(GLOB SOURCES "src/*.c")
add_executable(MyProgram ${SOURCES} src/myprogram.c)
target_link_libraries(MyProgram OTHERDLL)
在 CMake 中,您应该使用 ${...} 来调用变量,而不是
target_link_libraries(MyProgram OTHERDLL)
使用
target_link_libraries(MyProgram ${OTHERDLL})
根据 this tutorial,在组合 find_library
和 add_library
时,您应该在 add_library
调用中使用库名称(而不是完整路径),然后设置导入位置。所以:
find_library(OTHERDLL NAMES thirdparty PATHS ${CMAKE_SOURCE_DIR}/lib)
message(STATUS "find_library returned ${OTHERDLL}")
add_library(anyNameIsGood SHARED IMPORTED) #anyNameIsGood could be thirdparty for example
set_property(TARGET anyNameIsGood PROPERTY IMPORTED_LOCATION "${OTHERDLL}")
#(...)
target_link_libraries(MyProgram anyNameIsGood)