我有以下项目结构:
PROJECT( ${PROJECT_NAME} )
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(app)
SET(SOURCE
file.cpp
)
SET(HEADERS
some_lib_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
SET(SOURCE
main.cpp
)
SET(HEADERS
some_header.h
)
add_library( lib1 ${SOURCE} ${HEADERS} )
ADD_EXECUTABLE( app ${SOURCE} ${HEADERS} )
$mkdir build
$cd build
$cmake -C ..\myproject
它生成了我想要的源代码外的VS.sln文件,但是应用程序不能编译,因为它找不到lib1的头文件(显然)。
现在,我阅读并尝试了许多方法,比如target_link_libraries(app lib1)
(它使应用程序与lib1链接,但没有解决header include问题),以及应用程序的cmakelists.txt中各种变体中的add_subdirectory(../lib1)
(它们都抛出了我无法修复的错误),还有find_package(我猜这是错误的方法)。
那么我该如何解决这个问题(我想很简单...)问题?
这里有一个可能的解决方案:
根cmakelists.txt:
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(${PROJECT_NAME})
add_subdirectory(lib1)
add_subdirectory(lib2)
add_subdirectory(app)
lib1/cmakelists.txt:
project(Lib1)
add_library(lib1 lib1.cpp lib1.h)
project(Lib2)
add_library(lib2 lib2.cpp lib2.h)
# Add /lib1 to #include search path
include_directories(${Lib1_SOURCE_DIR})
# Specify lib2's dependency on lib1
target_link_libraries(lib2 lib1)
project(App)
add_executable(app main.cpp some_header.h)
# Add /lib1 and /lib2 to #include search path
include_directories(${Lib1_SOURCE_DIR} ${Lib2_SOURCE_DIR})
# Specify app's dependency on lib2.
# lib2's dependency on lib1 is automatically added.
target_link_libraries(app lib2)
cmake_minimum_required(VERSION 2.8 FATAL_ERROR)
project(Test)
add_library(lib1 lib1/lib1.cpp lib1/lib1.h)
add_library(lib2 lib2/lib2.cpp lib2/lib2.h)
add_executable(app app/main.cpp app/some_header.h)
include_directories(${CMAKE_SOURCE_DIR}/lib1 ${CMAKE_SOURCE_DIR}/lib2)
target_link_libraries(lib2 lib1)
target_link_libraries(app lib2)
有关相关命令及其原理的进一步信息,请运行:
cmake --help-command add_subdirectory
cmake --help-command include_directories
cmake --help-command target_link_libraries
假设有以下目录结构: 即。依赖于,依赖于这两者。(我知道静态库在技术上不“链接”,但这只是一个例子。) 问题是,在当前的设置中,lib1会编译两次--第一次在“test”构建目录中,第二次在“test/build_directory/lib2/build_directory”中。我想避免这种情况。 顶级的cmakelists.txt文件不是一个选项,因为我希望保持一个干净的顶级目录,并且能够在其他
我将描述我的CMake项目目前是如何安排的。现在还早,所以欢迎提出更好的安排。 顶级 lib1 lib2 我在每个级别上都有cmakelists.txt。 在Lib1 I add_library(STATIC)中,然后使用Lib2 target_link_library,它也是静态的。 lib2的cmakelists.txt执行对Qt5Widgets、Qt5Core和qt5gui的find_pac
我有一个项目被配置为: CMake项目 静态库A src(取决于B) 静态Lib B src(取决于Qt)
如果你在一次对话中加载了多个项目,你就可以设置它们之间的依赖关系 ,这也将影响你的项目的构建顺序。具体做法是打开 Dependencies 标签页,在其中选中你的依赖,如图12-23所示,我们同时载入了两个项目: textfinder 和 stylesheet,并以 textfinder 工程 为当前工程(active project),点击 Dependencies 标签页,选中 stylesh
我面临着以下问题。我有两个Gradle项目(ProjectA和ProjectB)在同一个层次结构上,没有任何根项目。由于ProjectA依赖于ProjectB,我尝试将其建模如下: ProjectA的settings.gradle: ProjectA的build.gradle: 然而,当我在ProjectA上执行gradle build时,我得到了以下错误: 我必须在ProjectB中定义某种默认
因此,自从添加新的Room android架构库以来,这种情况已经开始发生。我在AppDatabase_Impl没有过期时遇到问题,我通过在注释中添加kapt来修复它: < li>Android Room持久性库和Kotlin < li >在Kotlin中实现房间持久性库 < in Kotlin中的房间持久性库实现(Gradle错误) 我怀疑其他错误是由于AS、Kotlin和Java 8造成的,所