CMake之find_package问题研究

主要是用CMake的时候遇到了find_package的奇怪问题(windows上)。

先写一个测试CMakeLists

set(CMAKE_VERBOSE_MAKEFILE TRUE)
find_package(retdec 5.0 REQUIRED COMPONENTS retdec)

add_executable(main main.cpp)
target_link_libraries(main PUBLIC retdec::retdec)
target_include_directories(main PUBLIC retdec::retdec)

试着构建一下

cmake -Bbuild

竟然可以构建出来。打开项目工程(.sln)

image.png image.png

奇怪了,我确实下载过retdec的release bin,CMake怎么能识别到的呢。(后来发现是系统的Path环境变量里有这个路径,也就是说CMake还会自动去搜索全局变量)。即使不用全局变量,也可以通过参数指定这个目录。

比如

cmake -Bbuild -DCMAKE_INSTALL_PREFIX="D:\Download\RetDec-v5.0-Windows-Release"

但是如果直接下载retdec源码构建,构建完后我也不知道如何直接利用这个源码构建完的项目生成的bin进行find_package。但是当初构建llvm的时候是可以直接利用源码构建完的项目进行find_package的。以后在学习吧。

2023.5.30
隔了一天,我又研究了一下。我发现这个项目的readme对构建后的安装是有讲的(build-and-installation),我当时只看build,因为我对installation不懂,我就忽略了。

在源代码根目录执行

cmake --install .

image.png

好像是安装到这个路径。

我再次尝试编译

cmake -Bbuild -DCMAKE_INSTALL_PREFIX="D:\share\" -G="Visual Studio 16 2019" -DRETDEC_ENABLE_BIN2LLVMIR=1 -DRETDEC_MSVC_STATIC_RUNTIME=0

cmake -Bbuild -DCMAKE_INSTALL_PREFIX="D:\share\retdec" -G="Visual Studio 16 2019" -DRETDEC_ENABLE_BIN2LLVMIR=1 -DRETDEC_MSVC_STATIC_RUNTIME=0

image.png

find_package(retdec) 还是这种原因,不是这文件找不到就是那个文件找不到。真的眩晕。

参考链接:

https://www.cnblogs.com/penuel/p/13983503.html

https://cmake.org/cmake/help/latest/guide/tutorial/Installing%20and%20Testing.html