我知道在这个主题上已经有一些主题,但是,在阅读了很多主题后,我一直无法找到解决问题的方法。我正在处理文件加载器/解析器,并且是第一次使用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);
}
}
...
答案 0 :(得分:3)
HEADER_ONLY_TARGET
不是关键字参数。
如果您想要一个仅限标题的库,请使用接口库:
add_library(<name> INTERFACE [IMPORTED [GLOBAL]])
答案 1 :(得分:0)
添加了: SET_TARGET_PROPERTIES([some name] PROPERTIES LINKER_LANGUAGE C11) 到我的程序结束,错误消失了。在阅读了一百万个网页后,我发现https://kuniganotas.wordpress.com/2011/05/25/error-cmake-can-not-determine-linker-language-for-target/,解决方案就这么简单!希望这可以帮助其他人解决这个错误!