我有一个 CMake 项目,用于生成 Visual Studio 解决方案,然后尝试编译该解决方案。由于某种原因,编译后的库文件不存在。我搜索了整个项目文件夹,但找不到任何库文件。这是我的 CMake 设置:
项目根目录:
cmake_minimum_required(VERSION 3.22)
project(ShadowContainers)
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})
include_directories(include/)
add_subdirectory(library)
...
库子目录:
add_library(libShadows shadows.tpp ../include/shadows.hpp)
set_target_properties(libShadows PROPERTIES LINKER_LANGUAGE CXX) # a tpp and an hpp aren't enough to make the system certain it's c++
target_compile_features(libShadows PRIVATE cxx_std_23)
MSbuild 输出包含以下行:
Done Building Project "C:\Users\[..]\projects\Shadow Array\library\libShadows.vcxproj" (default targets).
Done Building Project "C:\Users\[..]\projects\Shadow Array\library\libShadows.vcxproj.metaproj" (default targets).
即使
libShadows
是我的项目中的唯一目标,它也不在我的项目目录中。
其他人有过这样的经历吗?任何帮助表示赞赏。谢谢!
编辑: 为了编译该项目,我尝试过:
我的典型流程(工作目录=项目根目录):
cmake .
msbuild ShadowContainers.sln
备用进程(工作目录也是项目根目录):
mkdir build
cd build
cmake ..
cmake --build .
尽管 VS 和 CMake 文件位于不同的位置,但两者都产生了相同的结果。无论哪种方式都不会输出任何库。
我能够找到问题。 CMake(以及与此相关的约定)不会将 .tpp 视为代码文件(类似于它们处理头文件的方式)。因此,我试图编译一个没有合法代码文件的目标。仅模板库根本不是库,所以我不应该尝试独立编译这个库,而应该将 .hpp 和 .tpp 作为包含在我的项目中!