c++ - CMake 无法确定目标 : fileloader 的链接器语言

标签 c++ c++11 visual-studio-2015 cmake

我知道已经有一些关于这个主题的话题,但是,在阅读了其中的许多话题之后,我无法找到解决我的问题的方法。我正在研究文件加载器/解析器,并且是第一次使用 CMake。我的 CMakeList.txt 文件用于导入 XML 解析器 (xerces),目前看起来像:

cmake_minimum_required(VERSION 2.8)
project(fileloader)

set(SRCS
        Source.cpp
)

include_directories(./
        ${SPF_ROOT}/xerces/win64/include/xercesc/dom
)

add_executables(${PROJECT_NAME} ${SRCS})

add_library(HEADER_ONLY_TARGET STATIC XMLString.hpp XercesDOMParser.hpp DOM.hpp HandlerBase.hpp PlatformUtils.hpp)
set_target_properties(HEADER_ONLY_TARGET PROPERTIES LINKER_LANGUAGE CXX)

当运行我的解决方案时,我收到的错误是“CMake 无法确定目标的链接器语言:fileloader”

我是 C++ 的新手,也是 CMake 的新手,所以希望我遗漏了一些简单的东西,但非常感谢任何和所有的帮助!

编辑: 我正在编写的代码是在一台不支持互联网的机器上,所以我无法复制和粘贴整个代码,但这是导致问题的原因:

...
#include "XMLString.hpp"
#include "XercesDOMParser.hpp"
#include "DOM.hpp"
#include "HandlerBase.hpp"
#include "PlatformUtils.hpp"

class XMLReader : public IFileReader {
public:
        XMLReader(){};
        void read(std::ifstream& file) {
        xerces::XMLPlatformUtils::Initialize();
        xercesc::XercesDOMParser* parser = new xercesc::XercesDOMParser();
        parser->setValidationScheme(xercesc::XercesDOMParser::Val_Always);
        parser->setDoNamespaces(true);

        xercesc::ErrorHandler* errHandler = (xercesc::ErrorHandler*) new xercesc::HandlerBase();
        parser->setErrorHandler(errHandler);

        std::getline(file, line);
        newFile = line.c_str();

        parser->parse(newFile);
    }
}
...

最佳答案

HEADER_ONLY_TARGET不是关键字参数。

如果你想要一个只有头文件的库,使用一个接口(interface)库:

add_library(<name> INTERFACE [IMPORTED [GLOBAL]])

关于c++ - CMake 无法确定目标 : fileloader 的链接器语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45939835/

相关文章:

c++ - 临时对象的数据成员是 C++11 中的 xvalue 吗?

c++ - T v{} 初始化

c# - 安装 VS2015 Update 2 后,除非进入 Debug模式,否则我无法再查看网站

teamcity - 是否可以将 TeamCity 配置为使用 Visual Studio 2015 附带的 MSBuild?

c++ - 调试器忽略已编辑的文件

c++ - 如何用元组转发unique_ptr?

c++ - 实现通配符后没有输入文件错误

c++ - 按值传递类时,调用者或被调用者是否调用析构函数?

c++ - 多重继承和可变参数模板

c++ - 为什么除非我添加括号,否则构造函数上的模板替换会失败?