这是我的源代码目录结构。
long lots_of_secs = 1e9;
我的要求如下:
你能给我一些示例代码吗?我知道ExternalProject_Add可以帮助我编译3rdlibs。但我真的不知道该怎么做。 我认为其他人也可能会对这个问题感兴趣。
答案 0 :(得分:1)
如果您在单个文件系统树中拥有所有来源,则最好使用add_subdirectory
而不是ExternalProject
。 ExternalProject
用于真正外部的项目,例如在远程服务器或VCS存储库上。与可以创建任何类型目标的add_subdirectory
不同,ExternalProject
只能创建UTILITY目标,类似于add_custom_target
命令。 UTILITY目标有局限性,例如:你不能在target_link_libraries
命令中使用它们。使用add_subdirectory
要简单得多。
顶层:
cmake_minimum_required(VERSION 3.7)
project("some_project")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_subdirectory(libs/3rdlibs1)
add_subdirectory(libs/mylib1)
add_subdirectory(apps/myapp1)
应用:
project("myapp1")
set(SRC_FILES ...)
add_executable(myapp1 ${SRC_FILES})
target_link_libraries(myapp1 PRIVATE mylib1)
库。据我所知,3rdlibs1是mylib1的可选依赖项。否则,myapp如何在没有3rdlibs1的情况下使用mylib1?
project("mylib1")
option(THIRD_LIBS_SUPPORT "description" OFF)
set(SRC_FILES ...)
add_library(mylib1 STATIC ${SRC_FILES})
#PUBLIC means that both mylib1 and its dependents use the headers
target_include_directories(mylib1 PUBLIC "${PROJECT_SOURCE_DIR}/include")
if(THIRD_LIBS_SUPPORT)
#PUBLIC means that 3rdlibs1 will be linked to mylib1 dependents
target_link_libraries(mylib1 PUBLIC 3rdlibs1)
target_compile_definitions(mylib1 PUBLIC -DTHIRD_LIBS_SUPPORT)
endif()