2016-06-17 2 views
1

Я не могу понять, как связать мою статическую библиотеку с моими тестовыми двоичными файлами, используя 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] 
+0

кажется вам микшировать C и C++, поэтому вы должны убедиться, что 'myproject_parse' не подлежит изменению имени C++ –

+0

, можете ли вы использовать [dumpbin] (https://msdn.microsoft.com/en-us/library/20y05bd5.aspx) для вывода символов в myproject.lib, таких как 'dumpbin/headers myproject.lib', и убедитесь, что указан символ 'parse'. – kirinthos

ответ

1

попытка линкование библиотеки имя цели, а также, возможно, убедитесь, что источники для Lib содержат файлы, которые вы ожидаете, другая возможность состоит в том, что никаких символов не будут скомпилированы

TARGET_LINK_LIBRARIES (${NAME_TEST} ${NAME_LIB}) 
+0

Неиспользуемый абсолютный путь дает ошибку компоновщика (unresolv внешний символ). –

+0

Неразрешенный внешний символ - намного лучшая ошибка (с точки зрения диагностики), пожалуйста, дайте мне полное сообщение об ошибке – kirinthos

+0

Я обновил исходное сообщение с информацией об ошибке компоновщика –

Смежные вопросы