First C++ program build via Blade and Clang
Noah Yao
2 min read
Q & A
CLANG basic setting
Break point is not accurate
optimize_list = [
"-O0",
"-g",
]
Envs
export CXX=clang
compile_flags.txt
# Treat all files as C++ files
-xc++
-std=c++17
BUILD
If use blade, the generated build command with CLANG will invalid, with that it reset the -I option to null.
mock-dep
extra_cppflags = [
"-Wno-unused-variable"
]
extra_cppflags = [
"-Wno-unused-variable",
"-std=c++17",
"-xc++",
]
optimize_list = [
"-O0",
"-g",
]
cc_library(
name = "myfolly",
hdrs = [
"include/myfolly/hello.h",
],
srcs= [
"src/hello.cpp",
],
incs = [
"//cpp3rdlib/myfolly/include",
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1", # Path to C++ standard library headers
],
extra_cppflags = extra_cppflags,
optimize = optimize_list,
visibility = "PUBLIC",
export_incs = ["include"],
)
extra_cppflags = [
"-Wno-unused-variable"
]
extra_cppflags = [
"-Wno-unused-variable",
"-std=c++17",
"-xc++",
]
optimize_list = [
"-O0",
"-g",
]
cc_library(
name = "folly",
hdrs = [
"include/folly/FBString.h",
],
incs = [
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1", # Path to C++ standard library headers
],
deps = [
"#dl",
"#pthread",
"#atomic",
"//cpp3rdlib/boost:boost",
"//cpp3rdlib/fmt-11.0.2:fmt",
],
export_incs = ["include"],
visibility = ["PUBLIC"],
prebuilt = True,
)
And the dependency file structure could be like this
➜ myfolly pwd
/Volumes/repos/blade/cpp3rdlib/myfolly
➜ myfolly tree
.
├── BUILD
├── include
│ └── myfolly
│ └── hello.h
└── src
└── hello.cpp
4 directories, 3 files
main.cpp
extra_cppflags = [
"-Wno-unused-variable"
]
extra_cppflags = [
"-Wno-unused-variable",
"-std=c++17",
"-xc++",
]
optimize_list = [
"-O0",
"-g",
]
cc_library(
name = "myfolly",
hdrs = [
"include/myfolly/hello.h",
],
srcs= [
"src/hello.cpp",
],
incs = [
"//cpp3rdlib/myfolly/include",
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/c++/v1", # Path to C++ standard library headers
],
extra_cppflags = extra_cppflags,
optimize = optimize_list,
visibility = "PUBLIC",
export_incs = ["include"],
)
CLang V.S G++
Clang has built-in support for atomic operations, so the need for libatomic might be due to a specific flag or configuration in your build system. Check your build scripts for flags like -latomic or similar, and try removing them or replacing them with Clang-compatible options.
0
Subscribe to my newsletter
Read articles from Noah Yao directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Noah Yao
Noah Yao
I’m a backend developer based in Beijing, passionate about crafting efficient and scalable solutions. Amidst my coding endeavors, I’ve embarked on an exciting journey as an active English learner. Exploring the intricacies of language allows me to broaden my horizons and connect with diverse communities worldwide. Join me as I navigate the realms of technology and language, striving for excellence in both.