c - GTest 未定义的引用
问题描述
在根目录 C CMakeLists.txt 是:
cmake_minimum_required(VERSION 3.0.0)
project(yx_ip C)
set(CMAKE_C_STANDARD 99)
#########
# GTest #
#########
enable_testing()
add_subdirectory(libs/gtest-1.7.0)
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR})
###########
# Project #
###########
add_executable(yx_ip main.c)
add_subdirectory(libs/arp)
add_subdirectory(libs/base)
add_subdirectory(unit_test)
target_link_libraries(yx_ip BASE ARP)
在unit_test
目录中是:
cmake_minimum_required(VERSION 3.0.0)
set(TEST_PROJECT_NAME UnitsTests)
file(GLOB LIBRARY_TESTS_SOURCE *.cpp)
project(${TEST_PROJECT_NAME})
enable_testing()
if (NOT (TARGET gtest AND TARGET gtest_main))
message(FATAL_ERROR "gtest and gtest_main targets NOT found")
endif()
add_executable(${TEST_PROJECT_NAME} ${LIBRARY_TESTS_SOURCE})
#target_link_libraries(${TEST_PROJECT_NAME} BASE)
target_link_libraries(${TEST_PROJECT_NAME} BASE gtest gtest_main)
add_test(${TEST_PROJECT_NAME}, ${TEST_PROJECT_NAME})
但是如果运行 make makefile 然后
unit_test/utils_test.cpp:6: undefined reference to `pasrse_ip_address(char*)'
collect2: error: ld returned 1 exit status
但如果只是 build main.c
,结果还可以。
解决方案
推荐阅读
- javascript - 在包含单词“Ice”的列表中找到并隐藏项目
- java - Http客户端响应无法区分用户名或密码
- java - Object.clone 方法调用给出堆栈溢出错误
- php - Symfony 循环语言
- angular - 动态创建材质对话框的内容是 Angular 6 中的任何组件
- javascript - 使形状在画布中保持方向移动,直到改变方向
- ffmpeg - ffmpeg 的后备输入
- android - Android AlarmManager 以小间隔触发太不可预测。接近预期时间的最小合理间隔是多少?
- mongodb - 查询引用集合的最佳实践?
- arrays - 从字符串数组创建一个数组对象