CMake-find-package兼容add-subdirectory 如果依赖是通过add_subdirectory添加的,那么find_package的时候会报错找不到xxx-config.cmake。 实际上通过add_subdirectory添加的话,对应的target已经存在了。所以我们可以直接判断如果target已经存在就跳过find_package: if(NOTTARGET依赖1)find_package(依赖1CONFIG REQUIRED)endif(...
find_package(MyLib NO_MODULE) 上述代码表示禁用find_package命令的模块模式,只使用CMake内置的文件搜索机制来查找MyLib库。 NO_DEFAULT_PATH:可选参数,用于禁用find_package命令的默认路径搜索。默认情况下,find_package命令会在一些预定义的路径中搜索库或框架。如果指定了该参数,find_package命令将只使用CMAKE_PREF...
通过热心网友提供的 FindXXX.cmake 现代vs 古代:用法上完全不同! 现代和古代的区别 官方文档:find_package 的两种模式 指定使用哪种模式 关于vcpkg 的坑 科普:语义版本号(semantic versioning)系统 find_package 命令指定版本 总结 古代CMake 常见问题 少见的 add_subdirectory 邪教 参考:【【公开课】现代CMake模块...
例如:添加三方库 include_directiories(/usr/include/curl) target_link_libraries(myprogram path/c...
对于大型项目来说,通常会将源代码按功能模块分成多个子目录。CMake支持通过add_subdirectory命令来引入子目录的构建逻辑。 设置编译选项 通过set命令可以设置编译选项,如编译器选项、宏定义等。 外部依赖管理 通过find_package命令来查找系统安装的库,也可以通过ExternalProject_Add和FetchContent等方式管理第三方依赖库。
add_executable(my_bin src/my_bin.cpp)find_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS})target_link_libraries(my_bin, ${OpenCV_LIBS}) 工作流程如下: find_package在一些目录中查找OpenCV的配置文件。 找到后,find_package会将头文件目录设置到${OpenCV_INCLUDE_DIRS}中,将链接库设置...
很早之前在CentOS7下编译安装过陈硕的muduo库并且成功运行示例程序muduo-tutorial,但是今天从github上面下载...
此外需要注意的是,因为add_subdirectory增加的构建子目录,CMake构建工程会自动将该子目录添加到编译和链接的搜索目录中,以保证整个构建工程能满足依赖,这也是为什么使用add_subdirectory后不需要将子文件夹加入到头文件或库文件搜索目录也能搜索到子目录的头文件或库文件。
对于Module模式,首先查找CMAKE_MODULE_PATH变量中的路径,然后就是CMake内置的一些固定路径,在其中寻找Find<package>.cmake。 对于Config模式,首先CMake会通过一些环境变量获取一组路径前缀,例如 <package>_DIR CMAKE_PREFIX_PATH CMAKE_FRAMEWORK_PATH CMAKE_APPBUNDLE_PATH ...
add_subdirectory(sub) 1. 2. 3. 4. 5. 在父目录下调用cmake .构建之后,在sub目录下会出现libsub.a库,说明当不指定binary_dir,输出目标文件就会放到source_dir目录下。 场景2:父目录CMakeLists.txt的add_subdirectory指定了source_dir和binary_dir。