首页 > 解决方案 > 仅标头库的 CMake 库问题

问题描述

所以我有一个库,它有两个文件mgparser.hpp(in include) 和mgparser.cpp(in src),因为我使用的是模板化函数,所以我必须在模板化类型的声明中包含函数的定义。出于这个原因,我在最后mgparser.hpp添加了#include "mgparser.cpp". CMake 代码看起来像这样

cmake_minimum_required(VERSION 3.1) 
project(magahttpparser VERSION 0.1)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)

add_library(mgparser STATIC 
    ${CMAKE_SOURCE_DIR}/include/mgparser.hpp
    # ${CMAKE_SOURCE_DIR}/src/mgparser.cpp
)
set_target_properties(mgparser PROPERTIES LINKER_LANGUAGE CXX)
target_compile_options(mgparser PUBLIC -Wall)
set_target_properties(mgparser PROPERTIES POSITION_INDEPENDENT_CODE ON)

target_include_directories(mgparser PUBLIC ${CMAKE_SOURCE_DIR}/include)
target_include_directories(mgparser PUBLIC ${CMAKE_SOURCE_DIR}/src)

由于mgparser.cpp是包含在头文件中的,不需要再编译一次,所以我把它注释掉了,但是这样导致库文件没有形成。我为此找到的一个简单解决方法是在 中创建一个空源文件random.cppsrc然后将其添加到add_library. 这种行为是否有任何原因,如果有,是否有任何适当的解决方法?

标签: c++cmakelinker-errors

解决方案


推荐阅读