Kar*_*rus 0 c++ makefile cmake
我是 Ubuntu,我正在学习 cmake 和 make,只是尝试一个简单的例子。我有两个目录:src和build. 在 中src,我有三个文件:main.cpp、camera.hpp和CMakeLists.txt,其中(仅)包含以下文本:
add_executable(test main.cpp)
target_link_directory(/home/karnivaurus/Libraries)
target_link_libraries(test Camera)
Run Code Online (Sandbox Code Playgroud)
在 中/home/karnivaurus/Libraries,我有一个名为 的共享库libCamera.so,我想链接到它。我main.cpp使用这个库中的函数,这些函数在camera.hpp.
现在,在我的build目录中,我运行cmake ../src,然后运行make。但是,然后我收到链接器错误,告诉我库中的某些函数存在未定义的引用。如果我搜索 中的所有文件和子目录build,则没有提及libCamera.so.
但是,如果我删除文件target_link_directory中的行CMakeLists.txt,并在指定可执行文件时写入库的完整路径,即target_link_libraries(test /home/karnivaurus/Libraries/libCamera.so),它可以正常编译和链接。
为什么target_link_directory没有按预期工作?
小智 5
这有一天可能会对某人有所帮助。
你应该使用target_link_directories之后add_executable
例子:
add_executable(main main.cpp)
然后
target_link_directories(target PUBLIC|PRIVATE|INTERFACE directory)
所以你的最终结果可能看起来像
add_executable(main main.cpp)
target_link_directories(main INTERFACE /my/libs/dir)
Run Code Online (Sandbox Code Playgroud)
或者
add_executable(main main.cpp)
target_link_directories(main PUBLIC /my/libs/dir)
Run Code Online (Sandbox Code Playgroud)
或者
add_executable(main main.cpp)
target_link_directories(main PRIVATE /my/libs/dir)
Run Code Online (Sandbox Code Playgroud)
不幸的是,CMake 不鼓励这样做,您应该链接您想要的实际库
target_link_libraries (main /my/awesome/lib.so)
Run Code Online (Sandbox Code Playgroud)
还有另一种链接目录的方法。
link_directories(/my/libs/dir)
Run Code Online (Sandbox Code Playgroud)
查看官方文档(https://cmake.org/cmake/help/git-stage/command/target_link_directories.html)
| 归档时间: |
|
| 查看次数: |
24374 次 |
| 最近记录: |