无法将库与CMAKE中的测试二进制链接

Unable to link library with test binaries in cmake

本文关键字:测试 二进制 链接 CMAKE      更新时间:2023-10-16

我不知道如何使用Windows上的cmake将静态库与测试二进制文件链接。我在做什么错?

项目的结构就像

下面
MyProject
  - build
  - include
    - catch
      - *.h
    - MyProject
      - *.h
  - src
    - *.c
  - test
    - *.cpp
  - CMakeLists.txt

和cmakelists.txt

CMAKE_MINIMUM_REQUIRED ( VERSION 3.3.1 )
SET ( NAME_LIB     "myproject" )
SET ( NAME_TEST    "test_myproject" )
SET ( PATH_BUILD   "${PROJECT_SOURCE_DIR}/build" )
SET ( PATH_INCLUDE "${PROJECT_SOURCE_DIR}/include" )
SET ( PATH_SOURCE  "${PROJECT_SOURCE_DIR}/src" )
SET ( PATH_TEST    "${PROJECT_SOURCE_DIR}/test" )
FILE ( GLOB SOURCES_LIB  "${PATH_SOURCE}/*.c" "${PATH_SOURCE}/*.cpp" )
FILE ( GLOB SOURCES_TEST "${PATH_TEST}/*.c" "${PATH_TEST}/*.cpp" )
INCLUDE_DIRECTORIES ("${PATH_INCLUDE}")
ADD_LIBRARY( ${NAME_LIB} STATIC "${SOURCES_LIB}" )
ADD_EXECUTABLE ( ${NAME_TEST} "${SOURCES_TEST}" )
TARGET_LINK_LIBRARIES ( ${NAME_TEST} "${PATH_BUILD}/${NAME_LIB}" )

使用cmake创建Visual Studio项目还可以,但是当我尝试使用MSBUILD构建解决方案时,我会收到以下错误。

(Link target) ->
  LINK : fatal error LNK1104: cannot open file 'myproject.obj' [D:Sourcemyprojectbuildtest_myproject.vcxproj]

指定库名而不是绝对路径时的错误。

test_myproject.obj : error LNK2019: unresolved external symbol "int __cdecl myproject_parse(char const *)" (?myproject_parse@@YAHPBD@Z
) referenced in function _main [D:Sourcemyprojectbuildtest_myproject.vcxproj]
D:SourcemyprojectbuildDebugtest_myproject.exe : fatal error LNK1120: 1 unresolved externals [D:Sourcemyprojectbuildtest_
myproject.vcxproj]

尝试通过目标名称链接您的库,也可以确保LIB的来源包含您期望的文件,另一个可能性是没有编译符号

TARGET_LINK_LIBRARIES ( ${NAME_TEST} ${NAME_LIB} )