Как я могу добавить копты по умолчанию, такие как -fopenmp для cc_library? - PullRequest
0 голосов
/ 28 декабря 2018

https://docs.bazel.build/versions/master/be/c-cpp.html

О опции copts:

Каждая строка в этом атрибуте добавляется в заданном порядке к COPTS перед компиляцией двоичной цели.Флаги вступают в силу только для компиляции этой цели, а не ее зависимостей, поэтому будьте осторожны с заголовочными файлами, включенными в другое место.Все пути должны относиться к рабочему пространству, а не к текущему пакету.

cc_library(
    name = 'lib1',
    srcs = glob([
        'src/*.cpp',
    ]),
    hdrs = glob([
        'include/*.h',
        'include/**/*.h',
    ]),
    copts = [ 
        '-std=c++11',
        '-fopenmp',
        '-march=native',
    ],
)

cc_binary(
    name = "test1",
    srcs = ["tests/test1.cpp"],
    deps = [
        ":lib1",
    ],
    copts = [ 
        '-std=c++11',
        '-fopenmp',
        '-march=native',
    ],
)

Если я удалю копты в правиле test1, компиляция не удастся.Как я могу изменить правило lib1, чтобы все правила, зависящие от него, также могли компилироваться.

1 Ответ

0 голосов
/ 02 января 2019

Если для каждой цели требуется -std=c++ -fopenmp -march=native при компиляции, лучше указывать copts в команде сборки (bazel build --copt="-std=c++" --copt="-fopenmp" --copt="-march=native" //src:hello).Затем вы можете удалить правила copts in cc_*.

Также обратите внимание, что если вы хотите использовать -march=native в одном файле, всегда лучше убедиться, что все другие файлы также скомпилированы с этим флагом.чтобы избежать некоторых ошибок, которые могут быть вызваны оптимизацией компилятора.

...