我对整个 CMake 逻辑和语法很陌生。对于我正在处理的代码,我需要使用该cap_set_proc函数来处理进程功能标志 ( man link )。所以我决定从你在这里看到的一段非常愚蠢的代码开始:
#include<iostream>
#include<string>
#include<sys/capability.h>
using namespace std;
int main(){
cap_t test = cap_get_proc();
string whatsTest(cap_to_text(test,nullptr));
cout<<whatsTest<<endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(目前,我不在乎我写的代码是否有意义......)
现在,如果我只是使用c++(如下所示)一切都可以正常编译并且可执行文件运行没有任何问题:
c++ test_main.cpp -o test_cap -lcap
Run Code Online (Sandbox Code Playgroud)
问题是我正在工作的项目非常庞大,并且非常依赖 CMake。所以我想编译相同的代码,但使用 CMake... 我如何编写一个 CMakeLists.txt 文件,让我获得与前几行中显示的编译器指令相同的结果?
您只需要以下内容即可:
cmake_minimum_required(VERSION 3.17)
project(TestCapProject)
# Add your executable target.
add_executable(test_cap test_main.cpp)
# Link the libcap library to your executable.
target_link_libraries(test_cap PRIVATE cap)
Run Code Online (Sandbox Code Playgroud)
如果要将其添加到现有 CMake 项目中,则可能只需要最后两行或三行,具体取决于您的项目层次结构。
我建议通读 CMake指南以了解一些基本的 CMake 命令。
您需要的两个主要命令的文档在这里: