在我的CMake项目中,我有两个第三方库是必需的。 问题是第二个需要首先构建第一个。
准确地说,我有以下结构
-project
CMakeLists.txt // add_subdirectory(first_lib)
// add_subdirectory(second_lib)
- first_lib
CMakeLists.txt // ...
- second_lib
CMakeLists.txt // ..
// contains find_package(first_lib REQUIRED)
// ..
此项目无法构建,因为必须首先构建第一个库并安装以使其包可用。
在CMake中处理此案例的最佳方法是什么?
答案 0 :(得分:0)
您可以使 second_lib 取决于 first_lib 的目标名称。这将强制首先构建 first_lib 。
为避免修改 second_lib 的CMakeLists.txt,您可以使用以下解决方案:
创建自定义Findfirst_lib.cmake模块。设置模块内 second_lib 所需的任何 first_lib 相关变量。
set(FIRST_LIB_LIBRARIES first_lib) #use *first_lib* target name here.
set(FIRST_LIB_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/first_lib/include)
不要忘记将模块的目录添加到CMAKE_MODULE_PATH。
此解决方案假定 second_lib 使用由Findfist_lib模块设置的变量,在target_link_libraries,target_include_directories等中。例如:
target_link_libraries(second_lib ${FIRST_LIB_LIBRARIES})
我还没有办法让它适用于导入的目标。
答案 1 :(得分:0)
我在这里使用
找到答案add_dependencies()
Force building external project (with buildtools) before main project with CMake