First C++ program build via Blade and Clang

·

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.