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)
奇怪了,我确实下载过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 .
好像是安装到这个路径。
我再次尝试编译
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
再 find_package(retdec) 还是这种原因,不是这文件找不到就是那个文件找不到。真的眩晕。
参考链接:
https://www.cnblogs.com/penuel/p/13983503.html
https://cmake.org/cmake/help/latest/guide/tutorial/Installing%20and%20Testing.html