注意:我只在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库,但我无法识别周围的情况。