我在Windowsx64平台上与MinGW一起使用CLion -这是问题的背景。
我之前试着安装gtest。但中间出现了许多混乱。
我第一次按照googletest-release-1.12.1\
的指令运行这些命令(在googletest-release-1.12.1\googletest\README.md
中)
mkdir build
cd build
cmake ..
但我收到了这样的错误信息:
CMake Error at CMakeLists.txt:51 (project):
Failed to run MSBuild command:
C:/Windows/Microsoft.NET/Framework/v4.0.30319/MSBuild.exe
to get the value of VCTargetsPath:
然后我把我最后的命令改为
cmake -G "MinGW Makefiles" ..
因为我使用MinGW提供的make。我不知道它是否正确,但它运行正常。
然后我打电话给
make
make install
make
跑得很顺利。但是当我运行make install
,时,我得到了这些消息
Install the project...
-- Install configuration: ""
-- Installing: C:/Program Files (x86)/googletest-distribution/include
CMake Error at googlemock/cmake_install.cmake:41 (file):
file INSTALL cannot make directory "C:/Program Files
(x86)/googletest-distribution/include": No such file or directory.
Call Stack (most recent call first):
cmake_install.cmake:42 (include)
make: *** [Makefile:109: install] Error 1
这段时间我都不知道。所以我改变了我的方式。根据this的回答,我将整个库复制到我的项目中,并按如下方式编辑CMakeLists.txt
:
cmake_minimum_required(VERSION 3.23)
project(gtest_study)
set(CMAKE_CXX_STANDARD 20)
add_subdirectory(googletest-release-1.12.1)
include_directories(googletest-release-1.12.1/googletest/include)
include_directories(googletest-release-1.12.1/googlemock/include)
add_executable(gtest_study main.cpp)
target_link_libraries(gtest_study gtest gtest_main)
target_link_libraries(gtest_study gmock gmock_main)
所以我的问题是:
make
和cmake
构建它的两种方法有什么区别吗?只使用CMakeLists.txt
中的include_directories
和target_link_libraries
之类的命令?(比如.h
和.dll
文件?)还是完全一样?我不知道)make install
在上安装一个库时,我应该做什么,特别是?在我的系统环境中指定某个目录(我不知道是哪个目录)或what?-G "Ninja"
在我的本地env中不工作)发布于 2022-08-20 08:19:05
之间的区别
cmake ..
和
cmake -G "MinGW Makefiles" ..
是生成器的选择:前者使用默认生成器,后者使用您指定的生成器。(cmake --help
应该在默认生成器旁边放置一个*
。)
根据错误消息,我假设这是一个visual生成器,您可能无法在MinGW终端中正确地运行该生成器。
在后一种情况下,默认安装目录似乎是基于目标OS (Windows)的,但似乎没有考虑到这样一个事实:您是从MinGW终端运行的,默认安装路径(C:/Program Files (x86)/googletest-distribution
)无效。
您可以尝试通过在cmake配置期间(在源dir之前传递-D 'CMAKE_INSTALL_PREFIX=/c/Program Files (x86)/googletest-distribution'
)或在安装过程中提供安装目录来修复这个问题。
下面的过程应该允许您安装库。我在这里使用我喜欢的构建方式,即不使用build系统依赖的命令,而是使用cmake运行构建/安装命令。我假设工作目录是gtest源的根目录:
cmake -G "MinGW Makefiles" -S . -B build
cmake --build build
cmake --install build --prefix '/c/Program Files (x86)/googletest-distribution'
最后一个命令需要以管理权限运行,我不建议以admin的形式运行前两个命令。您可以将其安装到一个目录中,在该目录中,即使没有管理权限,也可以创建目录。
使用上面描述的过程和使用add_subdirectory
之间的区别是,前者导致了系统上的安装,可以通过find_package
使用,而谷歌测试库不会为您这样做的每个项目重新构建。
...
project(gtest_study)
...
# you may need to pass the install location via -D CMAKE_PREFIX_PATH=<install_location> during configuration for this to work
find_package(GTest REQUIRED)
target_link_libraries(gtest_study PRIVATE GTest::gtest_main GTest::gmock)
后者将google测试项目构建为您自己的项目构建的一部分,并且对于您使用这种方法的每个项目,都会构建一个单独版本的google测试库。注意:不应该自己指定包含dirs,因为这类信息被附加到cmake目标并自动应用于链接目标:
#include_directories(googletest-release-1.12.1/googletest/include)
#include_directories(googletest-release-1.12.1/googlemock/include)
add_executable(gtest_study main.cpp)
target_link_libraries(gtest_study PRIVATE gtest_main gmock)
3.用于构建CMake的GTest生成器应独立于使用它的项目的生成器。重要的是构建系统所使用的编译器是兼容的。我不能详细说明这一点,因为我从未使用过CLion,因此对它使用的编译器了解太少。(就我个人而言,我正在Windows上使用Visual。)
https://stackoverflow.com/questions/73423280
复制相似问题