关于make时,通过-j参数指定多线程数目
之前在折腾crosstool-ng:
【记录】crosstool为xscale编译(ct-ng build)过程
时,就偶尔看到别人用
ct-ng build.4
意思是多线程去编译
估计底层就是调用的makefile的支持多线程的这个功能。
后来又在别处看到类似的写法了:
Introduction to Cross Compilation
中的:
1 | make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- uImage -j4 |
此时,才想到,去查查make的参数:
(此处是在cygwin中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | Administrator@PC-20130611GART /cygdrive/e/Dev_Root $ make --help Usage: make [options] [target] ... Options: -b, -m Ignored for compatibility. -B, --always- make Unconditionally make all targets. -C DIRECTORY, --directory=DIRECTORY Change to DIRECTORY before doing anything. -d Print lots of debugging information. --debug[=FLAGS] Print various types of debugging information. -e, --environment-overrides Environment variables override makefiles. -- eval =STRING Evaluate STRING as a makefile statement. -f FILE, -- file =FILE, --makefile=FILE Read FILE as a makefile. -h, --help Print this message and exit . -i, --ignore-errors Ignore errors from recipes. -I DIRECTORY, --include- dir =DIRECTORY Search DIRECTORY for included makefiles. -j [N], --jobs[=N] Allow N jobs at once; infinite jobs with no arg. -k, --keep-going Keep going when some targets can't be made. -l [N], --load-average[=N], --max-load[=N] Don't start multiple jobs unless load is below N. -L, --check- symlink - times Use the latest mtime between symlinks and target. -n, --just-print, --dry-run, --recon Don't actually run any recipe; just print them. -o FILE, --old- file =FILE, --assume-old=FILE Consider FILE to be very old and don't remake it. -p, --print-data-base Print make 's internal database. -q, --question Run no recipe; exit status says if up to date . -r, --no- builtin -rules Disable the built- in implicit rules. -R, --no- builtin -variables Disable the built- in variable settings. -s, --silent, --quiet Don't echo recipes. -S, --no-keep-going, --stop Turns off -k. -t, -- touch Touch targets instead of remaking them. --trace Print tracing information. - v , --version Print the version number of make and exit . -w, --print-directory Print the current directory. --no-print-directory Turn off -w, even if it was turned on implicitly. -W FILE, --what- if =FILE, --new- file =FILE, --assume-new=FILE Consider FILE to be infinitely new. --warn-undefined-variables Warn when an undefined variable is referenced. This program built for i686-pc-cygwin Report bugs to <bug- make @gnu.org> Administrator@PC-20130611GART /cygdrive/e/Dev_Root $ |
果然对应的-j==–jobs,指的是多线程的意思:
-j [N], –jobs[=N] Allow N jobs at once; infinite jobs with no arg. |
用法即:
1 | make –j 4 |
或
1 | make –jobs=4 |
make加上-s,表示silent,不输出详细log信息
之前折腾:
【记录】尝试用QEMU模拟ARM开发板去加载并运行Uboot,kernel,rootfs
参考的:
中就用到:
1 2 3 | sudo make install -s make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- versatile_defconfig -s make ARCH=arm CROSS_COMPILE=arm-none-linux-gnueabi- uImage -s |
其中的-s参数,之前就猜测是silent的意思。
根本上面的–help输出的信息,果然是:
-s, –silent, –quiet Don’t echo recipes. |
-f指定makefile文件
之前就知道的,可以通过-f指定特定的makefile文件的。
背景是:
当执行make时,默认会去(当前文件夹下)找名为Makefile的文件
如果此处你需要去运行特定文件名的makefile文件,比如my.mk
那么就可以通过-f去指定:
1 | make –f my.mk |
即可。
make help可以用来查看当前支持哪些目标
一般来说,多数的makefile文件,除了最常见的make all,make clean等最常见的目标之外,往往都会有自己不同的目标供执行,即:
make xxx
make yyy
等等。
而想要去查看,有哪些xxx和yyy供你使用,可以通过make help去查看。
举例:
最近折腾的:
【记录】Ubuntu下为QEMU的arm平台交叉编译BusyBox
中的make help的输出,就是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | crifan@ubuntu:busybox-1.16.0$ make help Cleaning: clean - delete temporary files created by build distclean - delete all non- source files (including .config) doc-clean - delete all generated documentation Build: all - Executable and documentation busybox - the swiss-army executable doc - docs /BusyBox .{txt,html,1} html - create html-based cross-reference Configuration: allnoconfig - disable all symbols in .config allyesconfig - enable all symbols in .config (see defconfig) config - text based configurator (of last resort) defconfig - set .config to largest generic configuration menuconfig - interactive curses-based configurator oldconfig - resolve any unresolved symbols in .config hosttools - build sed for the host. You can use these commands if the commands on the host is unusable. Afterwards use it like: make SED= "/home/crifan/develop/embedded/qemu/rootfs/busybox/busybox-1.16.0/sed" Installation: install - install busybox into CONFIG_PREFIX uninstall Development: baseline - create busybox_old for bloatcheck. bloatcheck - show size difference between old and new versions check - run the test suite for all applets checkhelp - check for missing help-entries in Config. in randconfig - generate a random configuration release - create a distribution tarball sizes - show size of all enabled busybox symbols objsizes - show size of each .o object built bigdata - show data objects, biggest first stksizes - show stack users , biggest first |
如此,就知道了:
当前的busybox的makefile中,支持如此多的目标,而想要查看当前busybox的各种stack信息,就可以去试试那个stksizes了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | crifan@ubuntu:busybox-1.16.0$ make ARCH=arm CROSS_COMPILE=arm-xscale-linux-gnueabi- stksizes arm-xscale-linux-gnueabi-objdump -d busybox_unstripped | /home/crifan/develop/embedded/qemu/rootfs/busybox/busybox-1 .16.0 /scripts/checkstack .pl arm | uniq buffered_vfprintf [busybox_unstripped]: 8384 phys_pages_info [busybox_unstripped]: 8192 __get_nprocs [busybox_unstripped]: 8192 __res_vinit [busybox_unstripped]: 8192 _IO_wfile_seekoff [busybox_unstripped]: 4224 __unix_grantpt [busybox_unstripped]: 4224 _IO_vfwprintf [busybox_unstripped]: 4224 grantpt [busybox_unstripped]: 4160 bb_full_fd_action [busybox_unstripped]: 4096 find_list_entry2 [busybox_unstripped]: 4096 readlink_main [busybox_unstripped]: 4096 pid_is_exec [busybox_unstripped]: 4096 execle [busybox_unstripped]: 4096 execl [busybox_unstripped]: 4096 execlp [busybox_unstripped]: 4096 _dl_get_origin [busybox_unstripped]: 4096 ipaddr_list_or_flush [busybox_unstripped]: 3664 iproute_list_or_flush [busybox_unstripped]: 3648 __c32 [busybox_unstripped]: 3600 buffered_vfprintf [busybox_unstripped]: 3302 __mpatan [busybox_unstripped]: 2976 fallbackSort [busybox_unstripped]: 2928 atan2Mp.constprop.0 [busybox_unstripped]: 2304 __mpsqrt [busybox_unstripped]: 2304 __slowpow [busybox_unstripped]: 2304 cal_main [busybox_unstripped]: 2288 internal_fnmatch [busybox_unstripped]: 2144 doCommands [busybox_unstripped]: 2112 __slowexp [busybox_unstripped]: 1984 __mpexp [busybox_unstripped]: 1984 normalized [busybox_unstripped]: 1968 get_next_block [busybox_unstripped]: 1968 identify_from_stdin [busybox_unstripped]: 1792 __ieee754_log [busybox_unstripped]: 1648 huft_build [busybox_unstripped]: 1488 iproute_modify [busybox_unstripped]: 1376 svc_getreq_common [busybox_unstripped]: 1328 __mpatan2 [busybox_unstripped]: 1312 inflate_block [busybox_unstripped]: 1296 _IO_vfprintf [busybox_unstripped]: 1296 __libc_message [busybox_unstripped]: 1280 getlogin_r [busybox_unstripped]: 1280 mainQSort3.constprop.2 [busybox_unstripped]: 1264 __gettextparse [busybox_unstripped]: 1248 iproute_get [busybox_unstripped]: 1184 rx_main [busybox_unstripped]: 1152 ether_wake_main [busybox_unstripped]: 1152 procps_scan [busybox_unstripped]: 1152 unwind_phase2_forced [busybox_unstripped]: 1152 build_trtable [busybox_unstripped]: 1126 wget_main [busybox_unstripped]: 1120 iprule_modify [busybox_unstripped]: 1120 getopt32 [busybox_unstripped]: 1104 _svcauth_des [busybox_unstripped]: 1088 two_way_long_needle [busybox_unstripped]: 1056 ether_hostton [busybox_unstripped]: 1056 check_existence_through_netlink [busybox_unstripped]: 1040 two_way_long_needle [busybox_unstripped]: 1040 clnt_sperror [busybox_unstripped]: 1040 clnt_spcreateerror [busybox_unstripped]: 1040 _dl_signal_error [busybox_unstripped]: 1040 internal_fnwmatch [busybox_unstripped]: 1030 bad_zone [busybox_unstripped]: 1024 get_dirsize [busybox_unstripped]: 1024 map_block2 [busybox_unstripped]: 1024 map_block [busybox_unstripped]: 1024 addLines [busybox_unstripped]: 1024 getNum [busybox_unstripped]: 1024 perror_internal [busybox_unstripped]: 1024 __getmntent_r [busybox_unstripped]: 1024 __mpsin [busybox_unstripped]: 996 __mpcos [busybox_unstripped]: 996 __mpsin1 [busybox_unstripped]: 992 __mpcos1 [busybox_unstripped]: 992 __sin32 [busybox_unstripped]: 988 __cos32 [busybox_unstripped]: 988 __mpranred [busybox_unstripped]: 988 __mplog [busybox_unstripped]: 984 udhcpc_main [busybox_unstripped]: 884 dhcprelay_main [busybox_unstripped]: 836 udhcpd_main [busybox_unstripped]: 824 sha512_process_block128 [busybox_unstripped]: 812 glob_in_dir [busybox_unstripped]: 804 init_exec [busybox_unstripped]: 788 write_wtmp [busybox_unstripped]: 780 nfsmount [busybox_unstripped]: 732 do_tunnels_list [busybox_unstripped]: 724 print_tunnel [busybox_unstripped]: 712 pututline_file [busybox_unstripped]: 708 if_readlist_proc [busybox_unstripped]: 696 udhcp_send_raw_packet [busybox_unstripped]: 692 arp_show [busybox_unstripped]: 684 __inv [busybox_unstripped]: 664 __gnu_Unwind_Backtrace [busybox_unstripped]: 664 udhcp_recv_raw_packet [busybox_unstripped]: 660 print_login_issue [busybox_unstripped]: 656 send_ACK [busybox_unstripped]: 644 send_release [busybox_unstripped]: 644 send_offer [busybox_unstripped]: 640 send_renew [busybox_unstripped]: 640 send_NAK [busybox_unstripped]: 636 send_discover [busybox_unstripped]: 636 send_inform [busybox_unstripped]: 632 send_decline [busybox_unstripped]: 632 send_select [busybox_unstripped]: 632 ash_main [busybox_unstripped]: 632 dnsd_main [busybox_unstripped]: 604 _dl_start_profile [busybox_unstripped]: 604 sha_crypt [busybox_unstripped]: 596 __gnu_Unwind_RaiseException [busybox_unstripped]: 580 _dl_map_object [busybox_unstripped]: 580 inetd_main [busybox_unstripped]: 576 readtoken1 [busybox_unstripped]: 572 _dl_debug_vdprintf [busybox_unstripped]: 556 process_dev [busybox_unstripped]: 544 get_header_tar [busybox_unstripped]: 540 uname_main [busybox_unstripped]: 540 last_main [busybox_unstripped]: 532 glob_in_dir [busybox_unstripped]: 532 dir_act [busybox_unstripped]: 524 retrieve_file_data [busybox_unstripped]: 524 log_option [busybox_unstripped]: 524 gaih_inet [busybox_unstripped]: 520 readprofile_main [busybox_unstripped]: 516 writeTarHeader [busybox_unstripped]: 516 _IO_vfscanf [busybox_unstripped]: 516 handle_net_output [busybox_unstripped]: 512 writeLongname [busybox_unstripped]: 512 getnameinfo [busybox_unstripped]: 484 print_addrinfo [busybox_unstripped]: 480 _nl_load_locale_from_archive [busybox_unstripped]: 460 read_alias_file [busybox_unstripped]: 460 _dl_discover_osversion [busybox_unstripped]: 460 authunix_create [busybox_unstripped]: 456 login_main [busybox_unstripped]: 452 print_route [busybox_unstripped]: 444 evalfun [busybox_unstripped]: 440 _dl_catch_error [busybox_unstripped]: 440 brctl_main [busybox_unstripped]: 420 evalbltin.isra.1 [busybox_unstripped]: 420 evaltree [busybox_unstripped]: 420 setvarsafe [busybox_unstripped]: 416 redirectsafe [busybox_unstripped]: 416 crond_main [busybox_unstripped]: 412 modprobe_main [busybox_unstripped]: 412 ipaddr_modify [busybox_unstripped]: 412 scan_proc_net [busybox_unstripped]: 412 _Unwind_VRS_Pop [busybox_unstripped]: 412 __sleep [busybox_unstripped]: 408 ____strtod_l_internal [busybox_unstripped]: 404 exitshell [busybox_unstripped]: 404 bb_ask [busybox_unstripped]: 404 get_linux_version_code [busybox_unstripped]: 396 safe_gethostname [busybox_unstripped]: 396 safe_getdomainname [busybox_unstripped]: 396 getdomainname [busybox_unstripped]: 396 runsv_main [busybox_unstripped]: 392 __gethostname [busybox_unstripped]: 392 update_utmp [busybox_unstripped]: 384 print_rule [busybox_unstripped]: 384 parse_config_file [busybox_unstripped]: 380 reread_config_file [busybox_unstripped]: 380 set_loop [busybox_unstripped]: 380 fbset_main [busybox_unstripped]: 372 find_block_device [busybox_unstripped]: 372 arping_main [busybox_unstripped]: 364 _IO_vdprintf [busybox_unstripped]: 364 md5_crypt [busybox_unstripped]: 356 passwd_main [busybox_unstripped]: 348 __mbsrtowcs_l [busybox_unstripped]: 348 list_devs_in_proc_partititons [busybox_unstripped]: 344 sha1_process_block64 [busybox_unstripped]: 340 __glob64 [busybox_unstripped]: 340 display_process_list [busybox_unstripped]: 332 __wcsrtombs [busybox_unstripped]: 332 INET6_displayroutes [busybox_unstripped]: 328 __dvd [busybox_unstripped]: 328 mainSort [busybox_unstripped]: 324 __mbsnrtowcs [busybox_unstripped]: 324 __ttyname_r [busybox_unstripped]: 324 glob [busybox_unstripped]: 324 sulogin_main [busybox_unstripped]: 316 makedevs_main [busybox_unstripped]: 316 re_compile_fastmap_iter.isra.40 [busybox_unstripped]: 316 do_lzo_decompress [busybox_unstripped]: 312 do_system [busybox_unstripped]: 312 do_lzo_compress [busybox_unstripped]: 308 updwtmp_file [busybox_unstripped]: 308 getutline_r_file [busybox_unstripped]: 308 correct_password [busybox_unstripped]: 304 __libc_start_main [busybox_unstripped]: 304 telnetd_main [busybox_unstripped]: 300 read_line_input [busybox_unstripped]: 300 re_search_internal [busybox_unstripped]: 300 internal_getut_r [busybox_unstripped]: 300 crifan@ubuntu:busybox-1.16.0$ |
5.
转载请注明:在路上 » 【整理】Linux下的make命令使用心得