无法使用cmake编译静态库,导致任何标准标头的编译`无法打开包含文件:...`

时间:2020-09-07 17:55:16

标签: c++ visual-c++ cmake

注意:我只在Windows上测试了此问题,但这就是我现在要解决的问题。

我正在尝试创建一个静态库,并且正在使用CMake生成构建文件。但是,构建导致找不到标准库。我重现此问题的最简单形式是使用以下3个文件:

Test.hpp

#pragma once

class A
{
public:
  int DoSomething();
};

Test.cpp

#include "Test.hpp"

#include <assert.h>

int A::DoSomething()
{
  assert(true);
  return 5;
}

CMakeLists.txt

cmake_minimum_required(VERSION 3.10.2)

project(MyLib VERSION 1.0.0 DESCRIPTION "My Lib")

set(SOURCE "src/Test.cpp")

if(WIN32)
  set(CMAKE_CXX_FLAGS "/std:c++17 /EHsc")
else()
...
endif()

include_directories(${CMAKE_CURRENT_LIST_DIR}/include)

add_library(MyLib STATIC ${SOURCE})

运行cmake很好,但是运行cmake --build .后,我得到以下输出: C:\PROGRA~2\MICROS~2\2019\COMMUN~1\VC\Tools\MSVC\1425~1.286\bin\HostX64\x64\cl.exe /nologo /TP -I..\..\..\include /std:c++17 /EHsc /MDd /Zi /Ob0 /Od /RTC1 /showIncludes /FoCMakeFiles\MyLib.dir\src\Test.cpp.obj /FdCMakeFiles\MyLib.dir\MyLib.pdb /FS -c ..\..\..\src\Test.cpp ..\..\..\src\Test.cpp(3): fatal error C1083: Cannot open include file: 'assert.h': No such file or directory

我不确定为什么找不到assert.h。我仅以它为例,但是所有STL标头中都会发生这种情况。我也尝试过使用/MD /MT /MTd,但它不会改变任何内容。感觉我需要做一些特别的事情,因为它是一个STATIC库,但我无法识别周围的情况。

0 个答案:

没有答案
相关问题