Я не могу понять, как связать мою статическую библиотеку с моими тестовыми двоичными файлами, используя cmake в 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 идет хорошо, но когда я пытаюсь построить решение, используя msbuild Я получаю следующую ошибку.
(Link target) ->
LINK : fatal error LNK1104: cannot open file 'myproject.obj' [D:\Source\myproject\build\test_myproject.vcxproj]
Ошибка при указании имени библиотеки вместо абсолютного пути.
test_myproject.obj : error LNK2019: unresolved external symbol "int __cdecl myproject_parse(char const *)" ([email protected]@[email protected]
) referenced in function _main [D:\Source\myproject\build\test_myproject.vcxproj]
D:\Source\myproject\build\Debug\test_myproject.exe : fatal error LNK1120: 1 unresolved externals [D:\Source\myproject\build\test_
myproject.vcxproj]
кажется вам микшировать C и C++, поэтому вы должны убедиться, что 'myproject_parse' не подлежит изменению имени C++ –
, можете ли вы использовать [dumpbin] (https://msdn.microsoft.com/en-us/library/20y05bd5.aspx) для вывода символов в myproject.lib, таких как 'dumpbin/headers myproject.lib', и убедитесь, что указан символ 'parse'. – kirinthos