我正在尝试使用cmake(在Linux上使用GNU make和g ++)来构建一个包含两个子目录的项目:MyLib和MyApp.MyLib包含静态库的源代码; MyApp需要链接到该库.我正在尝试使用以下CMakeLists.txt在生成的makefile上构建Linux:
cmake_minimum_required (VERSION 2.6)
project (MyProj)
include_directories (MyLib)
file(GLOB MyLibSrc MyLib/*.cpp)
add_library(MyLibrary STATIC ${MyLibSrc})
file(GLOB MyAppSrc MyApp/*.cpp)
add_executable(MyApplication ${MyAppSrc})
target_link_libraries(MyApplication MyLibrary)
Run Code Online (Sandbox Code Playgroud)
这"几乎"有效.它在链接时失败,因为它生成libMyLibrary.a - 它在根目录中.当我添加:
link_directories(${MyProj_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)
没什么区别.
我有一些(相互关联的)问题:
我是cmake的新手.我已经阅读了我在网上可以找到的内容,但发现自己很难让我的库与我的可执行文件链接.在我看来,这种配置应该很常见.一个小便的例子会很有帮助,但我找不到一个.
Ser*_*lov 26
嗯,最好阅读示例并做出确切建议的内容.
cmake_minimum_required (VERSION 2.6)
project (MyProj CXX)
add_subdirectory(MyLib)
add_subdirectory(MyApp)
Run Code Online (Sandbox Code Playgroud)
然后,对于指定的每个子目录,都会创建CMakeLists.txt文件
MyLib中\的CMakeLists.txt
file(GLOB SRC_FILES *.cpp)
add_library(MyLib ${SRC_FILES})
Run Code Online (Sandbox Code Playgroud)
MyApp的\的CMakeLists.txt
file(GLOB SRC_FILES *.cpp)
add_executable(MyApp ${SRC_FILES})
target_link_libraries(MyApp MyLib)
Run Code Online (Sandbox Code Playgroud)
使用“源外构建”。创建一个仅用于构建的目录,并在其中调用
cmake <源路径,可能是相对的>
要么使用
link_directories(${MyProj_BINARY_DIR}/MyLib)
或者在每个子目录中创建 CMakeLists.txt - 这对于较大的项目比非常小的项目更好。
这有点棘手,请查看文档中的 CMAKE_BUILD_TYPE (您可以通过它设置它和/或“if”)。您还可以从命令行设置它:
cmake -DCMAKE_BUILD_TYPE=调试
| 归档时间: |
|
| 查看次数: |
22789 次 |
| 最近记录: |